2011-10-06 16 views
6

से आइटम का चयन करें मैं इसWPF कॉम्बो बॉक्स - टैग

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

की तरह एक कॉम्बो बॉक्स मैं कैसे प्रोग्राम के रूप में टैग मूल्य द्वारा चयनित सूचकांक सेट कर सकते हैं? जैसे 'myMenu.selectedTag = 3' और प्रश्न 3 चयनित आइटम होगा?

मैं अपने वर्तमान समाधान वास्तव में से कुछ आसान चाहते हैं ...

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

जिज्ञासा से बाहर, आपको टैग द्वारा आइटम का चयन करने की आवश्यकता क्यों होगी? क्या आप उपयोग के मामले की व्याख्या कर सकते हैं? –

उत्तर

0

उदाहरण देखें आप कुछ इस तरह के लिए डेटा बाइंडिंग का उपयोग कर किया जाना चाहिए, लेकिन आप LINQ का उपयोग करके इसे कर सकता है:

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

आप एक निर्भरता संपत्ति के लिए चुना combox मूल्य बाध्य कर सकते हैं।

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

और XAML में: उदाहरण के लिए, यहाँ एक निर्भरता संपत्ति "CurrentTag" के साथ एक खिड़की है

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

फिर चयनित आइटम को बदलने के लिए, तो आप सिर्फ संपत्ति के मूल्य को संशोधित, के रूप में उपर्युक्त उदाहरण में (CurrentTag = "4";)

+0

एक साधारण सीएलआर संपत्ति उद्देश्य को पूरा करने के दौरान डीपी क्यों बनाना है? –

+0

एक साधारण संपत्ति के साथ, "CurrentTag" का मान संशोधित होने पर कॉम्बो-बॉक्स स्वचालित रूप से अपडेट नहीं किया जाएगा। – Jem

+0

हाँ, व्यूमोडेल क्लास को इसके लिए INotifyPropertyChanged इंटरफेस लागू करना चाहिए और हम इसे सामान्य रूप से करते हैं। व्यक्तिगत रूप से, मैं स्थिर डीपी बनाने से बचता हूं जब इसे सीएलआर संपत्ति के माध्यम से किया जा सकता है। –

संबंधित मुद्दे