【问题标题】:WPF + DevExpress UpdateSourceTriggerWPF + DevExpress UpdateSourceTrigger
【发布时间】:2017-08-19 17:36:04
【问题描述】:

我想在每个控件的绑定中添加“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 之前没有调用。

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

【问题讨论】:

    标签: c# wpf xaml binding devexpress


    【解决方案1】:

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

    不,不同的依赖属性对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}" />
    

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多