WPF数据绑定到更改对象

Jam*_*mes 6 c# data-binding wpf binding

我有一个用户控件,显示当前登录的用户名.我已将控件中的TextBlock绑定到我的应用程序中的User obejct的UserId属性.

我遇到的问题是每次新用户登录时,我的绑定用户对象都会更改.

我可以想到一个解决方案,当用户obejct发生变化时我会触发一个事件,然后通过控制抓住我,然后重新初始化绑定,但这似乎不太理想.

有没有解决这个问题的方法,我觉得它一定很常见?

干杯,

詹姆士

Mar*_*ell 8

大多数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 PropertyChangdEventArgs(
                                            propertyName));
   }
   private string userId;
   public string UserId {
       get {return userId;}
       set {
           if(userId != value) {
              userId = value;
              OnPropertyChanged("UserId");
           }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后应该自动更新绑定.相反,如果您正在更改实际的用户实例,那么请考虑相同的技巧,但针对用户的任何主机:

public User User {
    get {return user;}
    set {
        if(user != value) {
            user = value;
            OnPropertyChanged("User");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你绑定某些东西的"User.UserId",它应该可以工作.