使用wpf中的触发器更改绑定mvvm属性

时间:2011-09-05 16:19:56

标签: wpf data-binding binding mvvm triggers

我试图了解是否可以使用触发器更改控件绑定的属性...

所以我在ViewModel中有两个属性,并且如果第一个属性为null,则使用触发器,如果​​不为null,则控件将绑定第一个属性,或者绑定第二个属性。

这有可能实现吗?也可以使用命令吗?

提前致谢!

4 个答案:

答案 0 :(得分:1)

我通常不建议尝试这个。另一种IMO清洁方法是使用触发器来改变相关对象的可见性。

这允许您折叠控件并使用适当的绑定设置创建另一个控件,该控件基于一对触发器可见。这里的优点是您不必不断刷新绑定,而且,您的界面与ViewModel中的属性具有1-1相关性。

这也适用于命令,因为您的命令对象(即:按钮)可以切换到新的命令对象。

答案 1 :(得分:0)

在ViewModel中有一个属性,如果它不是null,则提供第一个属性的值,或者第二个属性的值,这将更简单。类似的东西:

public String BindToMe {
    get { return FirstProperty ?? SecondProperty; }
}

这对你有用吗?

答案 2 :(得分:0)

为什么PriorityBinding无法满足此要求?

答案 3 :(得分:0)

也许你可以使用ValueConverter进行多重绑定:

<MultiBinding Converter="{StaticResource MyConverter}">
    <Binding Path="FirstProperty" />
    <Binding Path="SecondProperty" />
</MultiBinding>

MyConverter应评估并返回正确的属性:

public class MyConverter: IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values[0] ?? values[1];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}