我想在每个控件的绑定中添加“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之前没有调用过。
有没有办法一次修改应用程序范围内的所有绑定行为?
答案 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}" />