WPF数据绑定到更改对象

k3fezbri  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(200)

我有一个用户控件,显示当前登录的用户名。我已将控件中的TextBlock绑定到应用程序中User obejct的UserId属性。
我遇到的问题是,每次有新用户登录时,我的绑定作为源的User对象都会更改。
我可以想到一个解决方案,当用户对象发生变化时,我会触发一个事件,这会被控制器捕获,然后重新初始化绑定,但这似乎不太理想。
有没有解决这个问题的办法,我觉得一定很普遍吧?
干杯
詹姆斯

klsxnrf1

klsxnrf11#

大多数UI绑定已经通过属性通知来处理这个问题,特别是(对于WPF)INotifyPropertyChanged。- 例如,如果您正在更新 * 单个 * 示例上的UserId:

class User : INotifyPropertyChanged {
   public event PropertyChangedEventHandler PropertyChanged;
   protected virtual void OnPropertyChanged(string propertyName) {
      PropertyChangedEventHandler handler = PropertyChanged;
      if(handler!=null) handler(this, new PropertyChangedEventArgs(
                                            propertyName));
   }
   private string userId;
   public string UserId {
       get {return userId;}
       set {
           if(userId != value) {
              userId = value;
              OnPropertyChanged("UserId");
           }
       }
   }
}

这将自动更新绑定。如果您要更改实际的用户示例,则考虑使用相同的技巧,但针对托管用户的任何内容:

public User User {
    get {return user;}
    set {
        if(user != value) {
            user = value;
            OnPropertyChanged("User");
        }
    }
}

如果你绑定到某个东西的“User.UserId”,那么它应该可以工作。

相关问题