我有两个具有不同属性的类,但都继承了其他一些基类:
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 路径错误:在“对象”“ClassA”(HashCode=66437409)上找不到“PropertyB”属性。绑定表达式:路径=属性B;DataItem='ClassA' (HashCode=66437409); 目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)
System.Windows.Data 警告:40:BindingExpression 路径错误:在“对象”“ClassB”(HashCode=2764078)上找不到“PropertyA”属性。绑定表达式:路径=属性A;DataItem='ClassB' (HashCode=2764078); 目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)
有没有更好的方法来处理这样的绑定?是否有任何性能影响,使用 FallbackValue='' 还是 FallbackValue={x:Null} 更好?