WPF:在GridViewColumn中使用PriorityBinding代替DisplayMemberBinding

本文关键字:PriorityBinding 代替 DisplayMemberBinding GridViewColumn WPF | 更新日期: 2023-09-27 18:05:06

我在WPF中为GridViewColumn设置了DisplayMemberBinding

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}" DisplayMemberBinding="{Binding Exception, Mode=OneWay, Converter={StaticResource typeConverter}, FallbackValue='---'}"/>

typeConverter"模仿"Exception.GetType()扩展,在Gui中以字符串形式显示异常的类型。如果没有异常,这个值为null,我想在这一列中输出另一个属性。现在我想使用PriorityBinding作为DisplayMemberBinding,但GridViewColumn都没有将PriorityBinding作为"子元素",也不可能使用DisplayMemberBinding属性作为"子元素"。是否有一种方法使用PriorityBinding GridViewColumn像这样:

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}">
    <PriorityBinding>
        <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" />
        <Binding Path="AnotherProperty" IsAsync="True" />
    </PriorityBinding>
</GridViewColumn>

编辑

我将我的代码改为下面的"ASh"建议,但它不起作用:

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}">
    <GridViewColumn.DisplayMemberBinding>
        <PriorityBinding  FallbackValue="-*-">
            <Binding Path="Exception" Converter="{StaticResource typeConverter}" Mode="OneWay" IsAsync="True"/>
            <Binding Path="Comment" FallbackValue="---"/>
        </PriorityBinding>
    </GridViewColumn.DisplayMemberBinding>
</GridViewColumn>

如果Exception属性为空,则显示值为空。我检查了第二个绑定属性"comment"是否设置,它是。

这两个绑定可以正常工作:

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderComment}" DisplayMemberBinding="{Binding Comment, FallbackValue='---'}"/>
<GridViewColumn Header="test2" DisplayMemberBinding="{Binding Exception, Mode=OneWay, Converter={StaticResource typeConverter}, FallbackValue='---'}"/>

WPF:在GridViewColumn中使用PriorityBinding代替DisplayMemberBinding

您缺少<GridViewColumn.DisplayMemberBinding>标签:

<GridViewColumn>
    <GridViewColumn.DisplayMemberBinding>
        <PriorityBinding>
           <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" />
           <Binding Path="AnotherProperty" IsAsync="True" />
        </PriorityBinding>
    </GridViewColumn.DisplayMemberBinding>
</GridViewColumn>

GridViewColumn被标记为ContentProperty属性,内容属性是Header: [ContentProperty("Header")]。所以没有GridViewColumn.前缀的<GridViewColumn>标签的内部内容应该分配给Header属性