5
我有一个用户控件,显示当前登录的用户名。我将控件中的TextBlock绑定到我的应用程序中的User objjct的UserId属性。WPF数据绑定到更改对象
我的问题是,用户对象我的绑定有作为源每次变化的新用户登录英寸
,我触发一个事件,我能想到的一个解决方案,当用户obejct变化,这被我控制,然后重新初始化绑定,但这似乎并不理想。
有没有解决这个问题的方法,我觉得它一定很常见?
干杯,
詹姆斯
我有一个用户控件,显示当前登录的用户名。我将控件中的TextBlock绑定到我的应用程序中的User objjct的UserId属性。WPF数据绑定到更改对象
我的问题是,用户对象我的绑定有作为源每次变化的新用户登录英寸
,我触发一个事件,我能想到的一个解决方案,当用户obejct变化,这被我控制,然后重新初始化绑定,但这似乎并不理想。
有没有解决这个问题的方法,我觉得它一定很常见?
干杯,
詹姆斯
大多数UI绑定已经通过物业通知处理这个问题,特别是(对WPF)INotifyPropertyChanged
。 - 也就是说,如果你正在更新一个单实例的用户名:
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”,那么它应该工作。
用户对象是否发生了变化(如果是这样,它在哪里设置?)还是用户ID改变(在同一个用户实例上)? – 2009-05-08 10:16:31
如果DataSource正在更改,将DataSource设置为新对象应自动更新绑定控件。如果绑定属性正在改变..你需要INotifyPropertyChanged – Gishu 2009-05-08 12:30:30