プロパティが異なる2つのクラスがありますが、どちらも他の基本クラスを継承しています。
public class BaseClass { }
public class ClassA : BaseClass
{
public string PropertyA { get; set; }
}
public class ClassB : BaseClass
{
public string PropertyB { get; set; }
}
コードビハインド:
public ObservableCollection<BaseClass> Items { get; set; }
public MainWindow()
{
Items = new ObservableCollection<BaseClass>
{
new ClassA {PropertyA = "A"},
new ClassB {PropertyB = "B"}
};
}
そして、私のXAMLは次のようになります。
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding PropertyA, FallbackValue=''}"/>
<GridViewColumn DisplayMemberBinding="{Binding PropertyB, FallbackValue={x:Null}}"/>
</GridView>
</ListView.View>
</ListView>
デバッグモードで実行している場合、出力ウィンドウには次のように表示されます。
System.Windows.Data警告:40:BindingExpressionパスエラー:'PropertyB'プロパティが'オブジェクト''' ClassA'(HashCode = 66437409)'に見つかりません。BindingExpression:Path = PropertyB; DataItem ='ClassA'(HashCode = 66437409); ターゲット要素は'TextBlock'(Name ='');です。ターゲットプロパティは「テキスト」(タイプ「文字列」)です
System.Windows.Data警告:40:BindingExpressionパスエラー:'PropertyA'プロパティが'オブジェクト''' ClassB'(HashCode = 2764078)'に見つかりません。BindingExpression:Path = PropertyA; DataItem ='ClassB'(HashCode = 2764078); ターゲット要素は'TextBlock'(Name ='');です。ターゲットプロパティは「テキスト」(タイプ「文字列」)です
このようなバインディングを処理するためのより良い方法はありますか?パフォーマンスに影響はありますか?FallbackValue=''またはFallbackValue={x:Null}を使用する方が良いですか?