kenei 2023-04-12 10:44 采纳率: 0%
浏览 7

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中的目标修改?

  • 写回答

1条回答 默认 最新

  • 美羊羊桑7890 2023-04-12 16:01
    关注

    以下内容部分参考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属性判断是双向绑定还是单向绑定,从而进行相应的处理。


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

    评论

报告相同问题?

问题事件

  • 修改了问题 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊