有没有办法让另一个绑定作为后备值?
我正在尝试做这样的事情:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
如果有人有另一种技巧可以实现这一目标,那就太棒了。
答案 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,可能会使用转换器转换为默认值。我不确定你怎么能默认为另一个绑定值。
答案 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>