我正在尝试设计一个WPF Datagrid,其中RowDetails(一个文本块)将绑定到网格的ItemSource元素的Details
字符串属性。
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Details}" .....
</DataTemplate>
</DataGrid.RowDetailsTemplate>
诀窍是,绑定集合中的元素可能没有Details
属性,在这种情况下,RowDetails应该只是空的。有没有办法让WPF绑定到一个在运行时可能不存在的属性,而不抛出异常? (要清楚的是,绑定集合中的项目都将具有Details
属性,或者它们都不会。我不是在讨论包含多个对象类型的集合。)
我想一个答案是强制此网格的用户提供始终具有Details属性的对象(IDetails接口或其他),但我认为不必这样做会很好 - 我想要网格在它可以显示的对象中非常灵活。
答案 0 :(得分:1)
经过多次调查,我发现了PriorityBindings,它完成了工作。这里我绑定到RowDetailsTemplate内的TextBlock,如果找不到binded属性,则将Fallbackvalue设置为空字符串:
<TextBlock.Text>
<PriorityBinding FallbackValue="">
<Binding Path="Details" IsAsync="True"/>
</PriorityBinding>
</TextBlock.Text>