WPF双向绑定的属性被修改时,set方法如何判断修改方是源还是目标?

比如ViewModel有个属性Name,

       private string _Name = string.Empty;
       public string Name
       {
           get { return _Name ; }
           set
           {
               _Name = value;
               this.NotifyPropertyChanged("Name");
           }
       }

View界面上有个TextBox双向绑定Name,

<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

当ViewModel初始化时,给Name赋初始值,比如 Name = "ABC";不做其他处理操作.

但当界面文本框修改Name值时,需要做一些处理,比如发消息存数据等等操作.

但ViewModel后台赋值,和VIew中界面修改值调用的都是属性的set方法,set方法中如何判断是ViewModel中的源修改,还是View中的目标修改?

以下内容部分参考ChatGPT模型:


在WPF双向绑定中,set方法无法直接判断修改方是源还是目标。但是可以通过绑定的Mode属性来判断是单向绑定还是双向绑定。如果Mode为TwoWay,则说明是双向绑定,需要更新源和目标;如果Mode为OneWay,则说明是单向绑定,只需要更新目标。

例如,在ViewModel中定义Name属性时,可以添加Mode属性:

private string _Name = string.Empty;
public string Name
{
    get { return _Name; }
    set
    {
        if (_Name != value)
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
    }
}

在XAML中绑定Name属性时,可以设置Mode属性为TwoWay:
<TextBox Text="{Binding Name, Mode=TwoWay}" />

这样,在修改TextBox中的值时,会自动更新ViewModel中的Name属性,反之亦然。在ViewModel中的set方法中,无法直接判断是源还是目标修改了属性值,但是可以通过Mode属性判断是双向绑定还是单向绑定,从而进行相应的处理。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快