WPF Datagrid - RowDetails绑定到可选属性?
问题描述:
我试图设计一个WPF Datagrid,其中RowDetails(文本块)将绑定到网格的ItemSource元素的Details
字符串属性。WPF Datagrid - RowDetails绑定到可选属性?
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Details}" .....
</DataTemplate>
</DataGrid.RowDetailsTemplate>
的诀窍是,它可能绑定的集合中的元素可能没有Details
属性,在这种情况下RowDetails应该仅仅是空的。有没有办法让WPF绑定到一个可能不存在于运行时的属性,而不会引发异常? (要清楚的是,绑定集合中的物品将全部拥有Details
属性,否则它们都不会。我不是在谈论拥有多个对象类型的集合。)
我想一个答案是强制这个网格的用户提供的对象总是具有一个Details属性(IDetails接口或其他),但我认为不用这样做会很好 - 我希望网格在它可以使用的对象中非常灵活显示。
答
环顾四周后,我发现PriorityBindings可以完成工作。这里我绑定到RowDetailsTemplate内的TextBlock,并且如果找不到绑定属性,则将Fallbackvalue设置为空字符串:
<TextBlock.Text>
<PriorityBinding FallbackValue="">
<Binding Path="Details" IsAsync="True"/>
</PriorityBinding>
</TextBlock.Text>