我有一个用户控件,显示当前登录的用户名。我已将控件中的TextBlock绑定到应用程序中User obejct的UserId属性。我遇到的问题是,每次有新用户登录时,我的绑定作为源的User对象都会更改。我可以想到一个解决方案,当用户对象发生变化时,我会触发一个事件,这会被控制器捕获,然后重新初始化绑定,但这似乎不太理想。有没有解决这个问题的办法,我觉得一定很普遍吧?干杯詹姆斯
klsxnrf11#
大多数UI绑定已经通过属性通知来处理这个问题,特别是(对于WPF)INotifyPropertyChanged。- 例如,如果您正在更新 * 单个 * 示例上的UserId:
INotifyPropertyChanged
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”,那么它应该可以工作。
1条答案
按热度按时间klsxnrf11#
大多数UI绑定已经通过属性通知来处理这个问题,特别是(对于WPF)
INotifyPropertyChanged
。- 例如,如果您正在更新 * 单个 * 示例上的UserId:这将自动更新绑定。如果您要更改实际的用户示例,则考虑使用相同的技巧,但针对托管用户的任何内容:
如果你绑定到某个东西的“User.UserId”,那么它应该可以工作。