我有一个用户控件,显示当前登录的用户名。我已将控件中的TextBlock绑定到我的应用程序中User obejct的UserId属性。
我遇到的问题是,每次新用户登录时,我的绑定用户对象都会更改。
我可以想到一个解决方案,当用户obejct发生变化时触发事件,然后通过控制抓住我,然后重新初始化绑定,但这似乎不太理想。
这个问题是否有解决方案,我觉得它一定很常见?
干杯,
詹姆斯
答案 0 :(得分: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");
}
}
}
}
然后应该自动更新绑定。相反,如果您正在更改实际的用户实例,那么请考虑相同的技巧,但针对用户的任何主机:
public User User {
get {return user;}
set {
if(user != value) {
user = value;
OnPropertyChanged("User");
}
}
}
如果你绑定某些东西的“User.UserId”,那么它应该有效。