有没有办法将另一个绑定作为后备值?
我正在尝试做这样的事情:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
如果有人有另一个技巧来实现它,那就太好了。
有没有办法将另一个绑定作为后备值?
我正在尝试做这样的事情:
<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
FallbackValue={Binding RootGroup.Name}}" />
如果有人有另一个技巧来实现它,那就太好了。
您正在寻找的是称为 PriorityBinding 的东西(此列表中的#6)
(来自文章)
PriorityBinding 的要点是按照最理想到最不理想的顺序命名多个数据绑定。这样,如果第一个绑定失败、为空和/或默认值,另一个绑定可以代替它。
例如
<TextBox>
<TextBox.Text>
<PriorityBinding>
<Binding Path="LastNameNonExistant" IsAsync="True" />
<Binding Path="FirstName" IsAsync="True" />
</PriorityBinding>
</TextBox.Text>
</TextBox>
如果您在绑定到空值和 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>
您希望它在什么条件下使用 Fallback 值?您将如何确定绑定失败?即使绑定到空值,绑定仍然有效。
如果绑定返回 null,我认为一个不错的选择可能是使用转换器转换为默认值。不过,我不确定您如何默认为另一个绑定值。
在此处查看转换器