2011-10-06 29 views
6

Tôi có một combo box như thế nàyWPF Combo hộp - Chọn Item bằng cách Tag

<ComboBox Name="myMenu"> 
     <ComboBoxItem Content="Question 1" Tag="1" /> 
     <ComboBoxItem Content="Question 2" Tag="2" /> 
     <ComboBoxItem Content="Question 3" Tag="3" /> 
     <ComboBoxItem Content="Question 4" Tag="4" /> 
    </ComboBox> 

Làm thế nào tôi có thể lập trình thiết lập các chỉ số được lựa chọn bởi Tag Value? Ví dụ. 'myMenu.selectedTag = 3' và Câu hỏi 3 sẽ là mục được chọn?

Tôi muốn một cái gì đó dễ dàng hơn giải pháp hiện tại của tôi thực sự ...

 int tagToSelect = 3; 
     foreach (ComboBoxItem item in myMenu.Items) 
     { 
      if(item.Tag.Equals(tagToSelect) 
      { 
       myMenu.SelectedItem = item; 
      } 
     } 
+2

Chỉ vì tò mò, tại sao bạn cần chọn các mục theo thẻ? Bạn có thể giải thích trường hợp sử dụng không? –

Trả lời

0

Bạn nên sử dụng liên kết dữ liệu cho một cái gì đó như thế này nhưng bạn có thể làm điều đó bằng cách sử dụng LINQ:

int tagToSelect = 3; 
myMenu.SelectedItem = myMenu.Items.Single(t => t.Tag.Equals(tagToSelect)); 
0

Bạn có thể ràng buộc giá trị combox chọn một tài sản phụ thuộc. Ví dụ, đây là một cửa sổ với một sự phụ thuộc tài sản "CurrentTag":

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 

     CurrentTag = "4"; 
    } 

    public static readonly DependencyProperty CurrentTagProperty = DependencyProperty.Register(
     "CurrentTag", typeof(string), typeof(Window1), 
     new PropertyMetadata("1")); 

    public string CurrentTag 
    { 
     get { return (string)this.GetValue(CurrentTagProperty); } 
     set { this.SetValue(CurrentTagProperty, value); } 
    } 
} 

và trong XAML:

<Window x:Class="WpfComboboxBinding.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="100" Width="300" 
    x:Name="window1"> 
    <StackPanel VerticalAlignment="Center"> 

     <ComboBox Name="myMenu" 
       SelectedValue="{Binding ElementName=window1, Path=CurrentTag, Mode=TwoWay}" 
       SelectedValuePath="Tag"> 
      <ComboBoxItem Content="Question 1" Tag="1" /> 
      <ComboBoxItem Content="Question 2" Tag="2" /> 
      <ComboBoxItem Content="Question 3" Tag="3" /> 
      <ComboBoxItem Content="Question 4" Tag="4" /> 
     </ComboBox> 

    </StackPanel> 
</Window> 

Sau đó, để thay đổi mục đã chọn, bạn chỉ cần thay đổi giá trị của tài sản, như trong ví dụ trên (CurrentTag = "4";)

+0

Tại sao tạo DP khi một thuộc tính CLR đơn giản có thể phục vụ mục đích? –

+0

Với một thuộc tính đơn giản, hộp tổ hợp sẽ không được cập nhật tự động khi giá trị của "CurrentTag" được sửa đổi. – Jem

+0

Vâng, lớp ViewModel sẽ triển khai giao diện INotifyPropertyChanged cho điều đó và chúng tôi sẽ làm điều đó. Cá nhân, tôi tránh tạo ra DP tĩnh khi nó có thể được thực hiện thông qua tài sản CLR. –

Các vấn đề liên quan