C# 基类项及其可见性的WPF列表

C# 基类项及其可见性的WPF列表,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,我有以下问题 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;} } 不,我有一个父类的列表 List<ParentC

我有以下问题

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;}
}
不,我有一个父类的列表

List<ParentClass> Parents = new List<ParentClass>();
List Parents=newlist();
我像这样把它绑在列表框上

<ListBox ItemsSource = "{Binding Parents}"/>

现在,如果它是ChildrenClass1类型,我想显示字段2,如果它是ChildrenClass2,我想在ListBox ItemTemplate中显示字段3

我想到的第一个解决方案是这样做:

<ListBox ItemsSource = "{Binding Parents}"/>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text = "{Binding Converter = {StaticResource Converter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

转换器应该检查项目的类型,如果是ChildrenClass1,则返回字段2,依此类推

但我认为这是权宜之计,而不是解决办法。有什么东西可以检查xaml或类似的东西中的类型吗?你如何解决这个问题


编辑:若我想大幅更改DataTemplate而不仅仅是一个字段,那个么情况会怎样?上述解决方法将是无用的。此问题的解决方法是使用不同的DataTemplate创建两个列表框,并使用converter检查项目的实际类型来设置可见性。但是它会产生许多绑定错误,并生成两个列表框,而不是一个会减慢应用程序速度的列表框。

您可以为每种类型创建两个DataTemplate,WPF可以发挥所有的魔力

<DataTemplate DataType="{x:Type namespace:ChildrenClass1}">
<TextBlock Text="{Binding Field2}"/>
</DataTemplate>

 <DataTemplate DataType="{x:Type namespace:ChildrenClass2}">
<TextBlock Text="{Binding Field3}"/>
</DataTemplate>

您可以为每种类型创建两个数据模板,WPF可以发挥所有的魔力

<DataTemplate DataType="{x:Type namespace:ChildrenClass1}">
<TextBlock Text="{Binding Field2}"/>
</DataTemplate>

 <DataTemplate DataType="{x:Type namespace:ChildrenClass2}">
<TextBlock Text="{Binding Field3}"/>
</DataTemplate>

您可以为每种类型创建两个数据模板,WPF可以发挥所有的魔力

<DataTemplate DataType="{x:Type namespace:ChildrenClass1}">
<TextBlock Text="{Binding Field2}"/>
</DataTemplate>

 <DataTemplate DataType="{x:Type namespace:ChildrenClass2}">
<TextBlock Text="{Binding Field3}"/>
</DataTemplate>

您可以为每种类型创建两个数据模板,WPF可以发挥所有的魔力

<DataTemplate DataType="{x:Type namespace:ChildrenClass1}">
<TextBlock Text="{Binding Field2}"/>
</DataTemplate>

 <DataTemplate DataType="{x:Type namespace:ChildrenClass2}">
<TextBlock Text="{Binding Field3}"/>
</DataTemplate>


Genius,这就是我需要的!:)谢谢天才,这就是我需要的!:)谢谢天才,这就是我需要的!:)谢谢天才,这就是我需要的!:)谢谢