39

有没有办法将另一个绑定作为后备值?

我正在尝试做这样的事情:

<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
                         FallbackValue={Binding RootGroup.Name}}" />

如果有人有另一个技巧来实现它,那就太好了。

4

3 回答 3

79

您正在寻找的是称为 PriorityBinding 的东西(列表中的#6)

(来自文章)

PriorityBinding 的要点是按照最理想到最不理想的顺序命名多个数据绑定。这样,如果第一个绑定失败、为空和/或默认值,另一个绑定可以代替它。

例如

<TextBox>
    <TextBox.Text>
        <PriorityBinding>
            <Binding Path="LastNameNonExistant" IsAsync="True" />
            <Binding Path="FirstName" IsAsync="True" />
        </PriorityBinding>
    </TextBox.Text>
</TextBox>
于 2009-12-16T18:01:42.643 回答
4

如果您在绑定到空值和 PriorityBinding 时遇到问题(正如 Shimmy 指出的那样),您可以使用 MultiBinding 和这样的 MultiValueConverter:

public class PriorityMultiValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.FirstOrDefault(o => o != null);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

用法:

<TextBox>
    <TextBox.Text>
        <MultiBinding Converter="{StaticResource PriorityMultiValueConverter}">
            <Binding Path="LastNameNull" />
            <Binding Path="FirstName" />
        </MultiBinding>
    </TextBox.Text>
</TextBox>
于 2015-08-17T08:46:09.010 回答
3

您希望它在什么条件下使用 Fallback 值?您将如何确定绑定失败?即使绑定到空值,绑定仍然有效。

如果绑定返回 null,我认为一个不错的选择可能是使用转换器转换为默认值。不过,我不确定您如何默认为另一个绑定值。

在此处查看转换器

于 2009-12-16T16:08:27.380 回答