2011-10-06 20 views
6

göre seç Ürün buWPF Birleşik giriş kutusu - Etiket

<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> 

gibi bir açılan kutu nasıl programlı Etiket Değer tarafından seçilen indeksi ayarlayabilirsiniz var? Örneğin. 'myMenu.selectedTag = 3' ve Soru 3 seçili öğe olur mu?

Sana ComboBox denetimi mülkü SelectedValuePath aradığınız gibi

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

Sadece meraktan dolayı, öğeleri neden etikete göre seçmelisiniz? Kullanım durumunu açıklayabilir misiniz? –

cevap

0

örnek Bkz ancak LINQ kullanarak bunu yapabilirsiniz:

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

Bir bağımlılık özelliği seçilen combox değerini bağlayabilir.

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); } 
    } 
} 

ve xaml: Örneğin, burada bir bağımlılık özelliği "CurrentTag" ile bir pencere

<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> 
Sonra

Seçilen öğeyi değiştirmek için, tıpkı özelliğinin değerini değiştirmek Yukarıdaki örnekte (CurrentTag = "4";)

+0

Basit bir CLR özelliği amaca hizmet edebilirken neden DP oluşturulsun? –

+0

Basit bir özellik ile "CurrentTag" değeri değiştirildiğinde, açılan kutu otomatik olarak güncellenmez. – Jem

+0

Evet, ViewModel sınıfı, bunun için INotifyPropertyChanged arabirimini uygulamalıdır ve biz bunu genel olarak yaparız. Şahsen, CLR özelliği ile yapılabildiğinde statik DP oluşturmamaya çalışıyorum. –