有没有办法让另一个绑定作为回退值?WPF绑定FallbackValue设置为绑定
我试图做这样的事情:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
如果任何人有另一种伎俩,把它关闭,这将是巨大的。
有没有办法让另一个绑定作为回退值?WPF绑定FallbackValue设置为绑定
我试图做这样的事情:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
如果任何人有另一种伎俩,把它关闭,这将是巨大的。
你所寻找的是(this名单#6)称为PriorityBinding东西
(文章)
点到PriorityBinding是 名多数数据绑定的顺序是最不希望的 。 这种方式如果第一个绑定失败, 是空的和/或默认的,另一个 绑定可以取代它。
例如,
<TextBox>
<TextBox.Text>
<PriorityBinding>
<Binding Path="LastNameNonExistant" IsAsync="True" />
<Binding Path="FirstName" IsAsync="True" />
</PriorityBinding>
</TextBox.Text>
</TextBox>
在什么条件下,您希望使用回退值?你如何确定绑定失败?即使绑定为空值,绑定仍然有效。
我认为一个很好的选择可能是使用转换器转换为默认值,如果绑定返回null。我不确定如何默认到另一个绑定值。
在我的情况下,这是我90%的地方+肯定DataContext会在它上面有一个特定的属性,但是我想回到调用'.ToString()'的地方/如果没有。 – tobriand 2017-02-08 13:53:35
如果遇到问题,结合空值和PriorityBinding(如摆振指出的),你可以使用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>
问题是,PriorityBinding将空字符串视为成功绑定 – Shimmy 2010-02-08 20:39:59
[MSDN](https://msdn.microsoft.com/zh-cn/library/system.windows.data.prioritybinding%28v=vs.110 %29.aspx):'DependencyProperty.UnsetValue的值不被视为成功的返回值。“ - 所以只需在绑定中使用Converter即可,如果您的值为null,则返回该属性。 @Shimmy – 2015-11-05 09:14:38