代码之家  ›  专栏  ›  技术社区  ›  HaxElit

WPF绑定FallbackValue设置为绑定

  •  35
  • HaxElit  · 技术社区  · 16 年前

    是否有方法将另一个绑定作为回退值?

    我想做这样的事:

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

    如果有人有另一个把戏,那就太好了。

    3 回复  |  直到 9 年前
        1
  •  68
  •   kiwipom    16 年前

    你要找的是一种叫做优先级绑定的东西。 this 列表)

    (来自文章)

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

    例如

    <TextBox>
        <TextBox.Text>
            <PriorityBinding>
                <Binding Path="LastNameNonExistant" IsAsync="True" />
                <Binding Path="FirstName" IsAsync="True" />
            </PriorityBinding>
        </TextBox.Text>
    </TextBox>
    
        2
  •  3
  •   James Hay    16 年前

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

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

    退房 converters here

        3
  •  2
  •   Sven    10 年前

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