저는 WPF에 비교적 익숙하지 않습니다. 아마도이 작업을 수행하는 데는 여러 가지 방법이있을 것입니다. 그러나 작업을 시도한 것들을 얻을 수는 없습니다.WPF ListBox의 단일 목록에서 여러 유형을 표시 하시겠습니까?
두 가지 유형이 포함 된 ObservableCollection이 있습니다.
이 목록을 ListBox에 바인딩하고 발생한 각 유형별로 다른 DataTemplate을 표시하려고합니다. 유형에 따라 데이터 템플릿을 자동으로 전환하는 방법을 알 수 없습니다.
내가 DataTemplate을의 데이터 형식 속성을 사용하려고 시도하고 ControlTemplates과 DataTrigger를 사용하여 시도했지만 아무 소용이, 하나는 아무것도가 표시되지 않습니다, 또는 그것이 내 유형을 찾을 수없는 주장이 ...
예 : 아래의 시도 :
나는 단지 하나의 데이터 템플릿이 ListBox에 연결되어 있지만 작동하지 않습니다.
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 - 링크 : http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx – HCL
DataTemplateSelector는 내가 이것을 넣어 한번 cruft 것 같습니다. 제안 주셔서 감사. 이 문제를 해결할 수있는 쉬운 방법이 있어야한다고 생각하고 제공했습니다. – davisoa