WPF绑定FallbackValue设置为绑定

时间:2009-12-16 15:54:03

标签: wpf data-binding fallback

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

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

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

如果有人有另一种技巧可以实现这一目标,那就太棒了。

3 个答案:

答案 0 :(得分:69)

您正在寻找的是名为PriorityBinding(this列表中的#6)

(来自文章)

  

指向PriorityBinding的目的是   按顺序命名多个数据绑定   最希望的,最不可取的。   这样,如果第一个绑定失败,   是空的和/或默认的,另一个   绑定可以取而代之。

e.g。

<TextBox>
    <TextBox.Text>
        <PriorityBinding>
            <Binding Path="LastNameNonExistant" IsAsync="True" />
            <Binding Path="FirstName" IsAsync="True" />
        </PriorityBinding>
    </TextBox.Text>
</TextBox>

答案 1 :(得分:3)

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

我认为如果绑定返回null,可能会使用转换器转换为默认值。我不确定你怎么能默认为另一个绑定值。

查看converters here

答案 2 :(得分:3)

如果遇到绑定到空值和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>