我有两个接口的实现,它包含在另一个类中。它看起来像这样:
public interface IMyInterface{
string someProperty
}
public class MyClass1 : IMyInterface{
string someProperty
}
public class MyClass2 : IMyInterface{
string someProperty
}
public class Wrapper{
public IMyInterface MyObject {get;}
public Wrapper(IMyInterface imi){
MyObject = imi;
}
public bool SomeOtherProperty {get; }
}
现在我有一个ObservableCollection<Wrapper> Wrappers
,我将在ItemSource
中使用ListBox
。但我想根据DataTemplate
的类型创建Wrapper.MyObject
。有没有办法实现这个目标?
答案 0 :(得分:2)
您可以为每种类型定义(在ItemsControl Resources中)DataTemplate。 ItemTemplate中的ContentControl应该选择正确的模板。
<ItemsControl ItemsSource="{Binding Wrappers}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type vm:MyClass1}">
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MyClass2}">
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding MyObject}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>