WPF + DevExpress UpdateSourceTrigger

时间:2017-08-19 17:36:05

标签: c# wpf xaml binding devexpress

我想在每个控件的绑定中添加“UpdateSourceTrigger = PropertyChanged”。

我可以通过为每个控件写作来实现:

Text/EditValue/Stuff="{Binding x, UpdateSourceTrigger=PropertyChanged}"

但是如果可能的话,我想避免这种方法,因为它只是冗余的xaml代码,我不得不一遍又一遍地写,而不是重复使用一段代码。

样式不是一个选项,因为对象绑定不同于xaml到xaml。

由于正在使用DevExpress,我们使用ExtensionMethod

DevExpress.Mvvm.POCO.POCOViewModelExtensions.RaisePropertiesChanged(this);

但问题在于:想象一下编辑TextEdit(单击TextEdit,输入内容),当光标仍然在TextEdit字段中时,调用上面提到的扩展方法。 TextEdit的EditValue将重置为旧值,因为PropertyChanged之前没有调用过。

有没有办法一次修改应用程序范围内的所有绑定行为?

1 个答案:

答案 0 :(得分:2)

  

有没有办法一次修改应用程序范围内的所有绑定行为?

不,不同的依赖项属性对UpdateSourceTrigger属性有不同的默认值,但您可以创建自定义绑定标记扩展:

public class PropertyChangedBinding : Binding
{
    public PropertyChangedBinding()
        :base()
    {
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    }

    public PropertyChangedBinding(string path)
        : base(path)
    {
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    }
}

...并将{Binding}替换为所有XAML文件中的自定义绑定:

<TextBox Text="{local:PropertyChangedBinding x}" />