WPF'ye göreceli olarak yeniyim ve muhtemelen bunu yapmanın bir çok yolu var gibi görünüyor, ama çalışmayı denediğimden hiçbirini alamıyorum.WPF ListBox'ta tek bir listeden birden çok türü görüntüleme?
İki farklı türden oluşan bir GözlemlenebilirKoleksiyonum var.
Bu listeyi bir ListBox'a bağlamak ve karşılaşılan her tür için farklı DataTemplates görüntülemek istiyorum. Veri şablonlarını türüne göre otomatik olarak nasıl değiştireceğimi anlayamıyorum.
Ben DataTemplate FieldSize özelliği kullanmaya çalıştı ve ControlTemplates ve DataTrigger kullanarak denedi ama boşuna, ya da hiçbir şey gösterir, yoksa benim türlerini bulamıyorum iddia var ...
Örnek Aşağıdaki girişimi yapın:
Şu anda yalnızca bir adet veri şablonunu ListBox'a kabloluyorum, ancak bu çalışmaz.
XAML: Arkasında
<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>
Kodu:
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 Haklısınız. Neden bu kadar havalı seçeneği görmediğimi merak ediyorum. Burada msdn-link: http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx – HCL
DataTemplateSelector bunu yerleştirdikten sonra küstah gibi görünüyor. Öneriniz için teşekkürler. Bunu çözmenin kolay bir yolu olmalı diye düşündüm ve sağladın! – davisoa