मैं डब्ल्यूपीएफ के लिए अपेक्षाकृत नया हूं, और ऐसा लगता है कि ऐसा करने के तरीकों का शायद एक समूह है, लेकिन मैं उन लोगों में से कोई भी नहीं प्राप्त कर सकता हूं जिन्हें मैंने काम करने की कोशिश की है।एक WPF ListBox में एक ही सूची से कई प्रकार प्रदर्शित करें?
मेरे पास एक अवलोकन करने योग्य चयन है जिसमें दो अलग-अलग प्रकार हैं।
मैं इस सूची को एक सूची बॉक्स में बांधना चाहता हूं और प्रत्येक प्रकार के सामना के लिए अलग-अलग डेटा टेम्पलेट प्रदर्शित करना चाहता हूं। मैं इस बात के आधार पर डेटा टेम्पलेट्स को स्वचालित रूप से स्विच करने का तरीका नहीं समझ सकता।
मैं DataTemplate का डेटा प्रकार गुण का उपयोग करने का प्रयास किया है और ControlTemplates और एक DataTrigger का उपयोग कर प्रयास किया, लेकिन कोई लाभ नहीं हुआ है, या तो यह कुछ भी नहीं दिखाई देता है, या यह इसे अपने प्रकार नहीं मिल सकता है का दावा है ...
उदाहरण नीचे प्रयास करें:
मेरे पास केवल एक ही डेटा टेम्पलेट है जो सूचीबॉक्स में वायर्ड है, लेकिन यह भी काम नहीं करता है।
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="PersonTemplate">
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</DataTemplate>
<DataTemplate x:Key="QuantityTemplate">
<TextBlock Text="{Binding Path=Amount}"></TextBlock>
</DataTemplate>
</Window.Resources>
<Grid>
<DockPanel>
<ListBox x:Name="MyListBox" Width="250" Height="250"
ItemsSource="{Binding Path=ListToBind}"
ItemTemplate="{StaticResource PersonTemplate}"></ListBox>
</DockPanel>
</Grid>
</Window>
पीछे कोड:
public class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
}
public class Quantity
{
public int Amount { get; set; }
public Quantity(int amount)
{
Amount = amount;
}
}
public partial class Window1 : Window
{
ObservableCollection<object> ListToBind = new ObservableCollection<object>();
public Window1()
{
InitializeComponent();
ListToBind.Add(new Person("Name1"));
ListToBind.Add(new Person("Name2"));
ListToBind.Add(new Quantity(123));
ListToBind.Add(new Person("Name3"));
ListToBind.Add(new Person("Name4"));
ListToBind.Add(new Quantity(456));
ListToBind.Add(new Person("Name5"));
ListToBind.Add(new Quantity(789));
}
}
+1 आप सही हैं। मुझे आश्चर्य है कि मैंने कभी यह बहुत अच्छा विकल्प क्यों नहीं देखा है। यहां msdn-link: http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx – HCL
डेटा टेम्पलेट चयनकर्ता इसे अंदर डालकर क्रूर जैसा प्रतीत होता है। सुझाव के लिए धन्यवाद। मैंने सोचा कि इसे हल करने का एक आसान तरीका होना चाहिए, और आपने इसे प्रदान किया है! – davisoa