2010-08-27 18 views
31

में ग्रुपिंग आइटम मेरे पास एक सूची दृश्य है जिसमें दो प्रकार की ऑब्जेक्ट्स, एकल और एकाधिक शामिल हैं। एकल एक सामान्य टेक्स्टब्लॉक है जबकि एकाधिक आइटम के साथ कॉम्बोबॉक्स है।कॉम्बोबॉक्स

मैं सफलता के बिना कॉम्बोबॉक्स में आइटम को समूहबद्ध करने का प्रयास कर रहा हूं। क्या यह संभव है? या मुझे एक अलग दृष्टिकोण के लिए जाना चाहिए?

क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ:

[ComboBox v] 
    [Header ] 
    [ Item] 
    [ Item] 
    [Header ] 
    [ Item] 
+1

अधिक मेरे लिए एक TreeView की तरह लगता है। – strattonn

+2

मैं सहमत हूं ... मैंने पहले एक वृक्षदृश्य बनाया लेकिन अंतिम उपयोगकर्ता एक combobox चाहता है ... – debe

उत्तर

51

यह संभव है। ग्रुप डिस्क्रिप्शन के साथ ListSollectionView का उपयोग आइटम्ससोर्स के रूप में करें और बस अपने कॉम्बोबॉक्स में समूह स्टाइल प्रदान करें। नीचे दिए गए नमूना देखें:

XAML:

<Window x:Class="StackOverflow.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:StackOverflow" 
     xmlns:uc="clr-namespace:StackOverflow.UserControls" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel> 
     <ComboBox x:Name="comboBox"> 
      <ComboBox.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Name}"/> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
       </GroupStyle> 
      </ComboBox.GroupStyle> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
    </StackPanel> 
</Window> 

कोड-पीछे:

namespace StackOverflow 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
      //this.comboBox.DataContext = this; 

      List<Item> items = new List<Item>(); 
      items.Add(new Item() { Name = "Item1", Category = "A" }); 
      items.Add(new Item() { Name = "Item2", Category = "A" }); 
      items.Add(new Item() { Name = "Item3", Category = "A" }); 
      items.Add(new Item() { Name = "Item4", Category = "B" }); 
      items.Add(new Item() { Name = "Item5", Category = "B" }); 

      ListCollectionView lcv = new ListCollectionView(items); 
      lcv.GroupDescriptions.Add(new PropertyGroupDescription("Category")); 

      this.comboBox.ItemsSource = lcv; 
     } 


    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public string Category { get; set; } 
    } 

} 
+2

इस के साथ हमारी मदद करने के लिए धन्यवाद! बहुत मदद की! भगवान भला करे। – Tony

+0

मैंने आपके समाधान की कोशिश की और यह काम करता है। लेकिन मुझे चयनित मूल्य नहीं मिल रहा है, मैंने combobox.SelectedItem.ToString() के साथ प्रयास किया लेकिन यह अपेक्षित परिणाम वापस नहीं करता है। क्या आपके पास कोई विचार है ? thx – Bluety

+0

दो साल की देरी ब्लूटी के लिए खेद है, लेकिन मुझे एक ही समस्या थी क्योंकि मेरी अंतर्निहित संपत्ति (स्ट्रिंग), चयनित इटैम प्रकार (मेरी मद श्रेणी) से मेल नहीं खाती थी और बाध्यकारी कभी नहीं हुआ था। चयनित इटैम के बजाय चयनित वैल्यू के लिए बाध्यकारी समस्या हल हो गई – Sean

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