WPF绑定回退值设置为绑定

WPF绑定回退值设置为绑定,wpf,data-binding,fallback,Wpf,Data Binding,Fallback,有没有办法让另一个绑定作为回退值 我正在尝试这样做: <Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView, FallbackValue={Binding RootGroup.Name}}" /> 如果有人有另一个技巧来实现它,那就太好了。在什么情况下,您希望它使用回退值?如何确定绑定失败?即使绑定到空值,绑定仍然有效 我认为如果绑定返回nul

有没有办法让另一个绑定作为回退值

我正在尝试这样做:

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


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

在什么情况下,您希望它使用回退值?如何确定绑定失败?即使绑定到空值,绑定仍然有效

我认为如果绑定返回null,最好使用转换器将其转换为默认值。不过,我不确定您如何可以默认为另一个绑定值


查看您正在寻找的是一种称为PriorityBinding(列表中的第6项)的东西

(摘自文章)

优先绑定的要点是 按顺序命名多个数据绑定 从最理想到最不理想的。 这样,如果第一次绑定失败, 为空和/或默认值,另一个 装订可以取代它的位置

e、 g


如果在绑定到null值和PriorityBinding(正如Shimmy指出的)时遇到问题,可以使用多绑定和多值转换器,如下所示:

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>


问题是PriorityBinding将null字符串视为成功的绑定:
值dependencProperty.UnsetValue不被视为成功的返回值。
-因此,只要在绑定上使用转换器,在值为null时返回该属性即可@在我的例子中,我90%以上肯定
DataContext
将有一个特定的属性,但我想返回调用
.ToString()
where/如果没有。
<TextBox>
    <TextBox.Text>
        <MultiBinding Converter="{StaticResource PriorityMultiValueConverter}">
            <Binding Path="LastNameNull" />
            <Binding Path="FirstName" />
        </MultiBinding>
    </TextBox.Text>
</TextBox>