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>