多个绑定目标(如果一个值为 null)

本文关键字:一个 null 如果 绑定 目标 | 更新日期: 2023-09-27 18:30:23

我想将Textblock.Text绑定到我已经完成的类属性,但是当此值为空时,我希望使用一个新属性,如果为空,则设置默认值。我以为这就是优先级绑定的用途?

<TextBlock.Text>
    <PriorityBinding>
            <Binding Path="Property1"/>
            <Binding Path="Property2"/>
            <Binding Source="---"/>
    </PriorityBinding>
</TextBlock.Text>

多个绑定目标(如果一个值为 null)

nullTextblock.Text 属性的有效值,因此它永远不会使用任何其他绑定。

从 MSDN:

优先级绑定允许您关联绑定目标(目标)属性 带有绑定列表。返回值的第一个绑定 成功成为活动绑定。

在以下情况下,绑定将成功返回值:

  1. 绑定源的路径已成功解析。

  2. 转换器(如果有)能够转换结果值。

  3. 生成的值对目标属性有效。

值 DependencyProperty.UnsetValue 不被视为成功 返回值。


您可以添加一个绑定转换器,该转换器在属性值null时返回DependencyProperty.UnsetValue

public class NullValueConverter : IValueConverter
{
    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value ?? DependencyProperty.UnsetValue;
    }
    ...
}

引发异常将导致无法解析属性,从而允许PriorityBind筛选到下一个绑定。