WPF数据绑定到更改对象

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

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

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

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

干杯,

詹姆士

大多数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"); } } } } 

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

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

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