我有以下问题
public abstract class ParentClass
{
public int Field{get;set;}
}
public class ChildrenClass1 : ParentClass
{
public int Field2{get;set;}
}
public class ChildrenClass2 : ParentClass
{
public int Field3{get;set;}
}
不,我有一个 ParentClass 列表。
List<ParentClass> Parents = new List<ParentClass>();
我像这样将它绑定到列表框。
<ListBox ItemsSource = "{Binding Parents}"/>
现在,如果它是 ChildrenClass1 类型,我想显示 Field2,如果是 ChildrenClass2,我想在 ListBox ItemTemplate 中显示 Field3。
我想到的第一个解决方案是做这样的事情:
<ListBox ItemsSource = "{Binding Parents}"/>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text = "{Binding Converter = {StaticResource Converter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
转换器应该检查项目的类型,如果是 ChildrenClass1,则返回 Field2,依此类推。
但我认为这是解决方法而不是解决方案。有什么可以检查 xaml 中的类型或类似的东西吗?你怎么解决这个问题 ?
编辑:如果我想显着改变 DataTemplate 不仅仅是一个字段,情况会怎样?上述解决方法将毫无用处。此问题的解决方法是使用不同的 DataTemplate 制作 2 个 ListBox,并使用转换器检查实际 typeof 项来设置可见性。但它会产生许多绑定错误并生成 2 个列表框而不是一个,这会减慢我们的应用程序的速度。