次の問題があります
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 などで型をチェックできるものはありますか? この問題をどのように解決しますか?
編集:1つのフィールドだけでなくDataTemplateを劇的に変更したい場合はどうなりますか? 上記の回避策は役に立ちません。この問題の回避策は、異なる DataTemplate を使用して 2 つの ListBox を作成し、実際の項目の種類を確認するコンバーターで可視性を設定することです。しかし、多くのバインド エラーが発生し、アプリケーションを遅くする 1 つではなく 2 つのリストボックスが生成されます。