C# WPF数据绑定到正在更改的对象
我有一个显示当前登录用户名的用户控件。我已将控件中的TextBlock绑定到应用程序中用户obejct的UserId属性 我遇到的问题是,每次新用户登录时,我的绑定作为源的用户对象都会发生更改 我可以想出一个解决方案,当用户obejct发生变化时触发一个事件,然后由我的控件捕获,然后重新初始化绑定,但这似乎不太理想 有没有解决这个问题的办法,我觉得一定很普遍吧 干杯C# WPF数据绑定到正在更改的对象,c#,wpf,data-binding,binding,C#,Wpf,Data Binding,Binding,我有一个显示当前登录用户名的用户控件。我已将控件中的TextBlock绑定到应用程序中用户obejct的UserId属性 我遇到的问题是,每次新用户登录时,我的绑定作为源的用户对象都会发生更改 我可以想出一个解决方案,当用户obejct发生变化时触发一个事件,然后由我的控件捕获,然后重新初始化绑定,但这似乎不太理想 有没有解决这个问题的办法,我觉得一定很普遍吧 干杯 James大多数UI绑定已经通过属性通知来处理此问题,特别是(对于WPF)INotifyPropertyChanged-i、 e.
James大多数UI绑定已经通过属性通知来处理此问题,特别是(对于WPF)
INotifyPropertyChanged
-i、 e.如果您在单个实例上更新用户ID:
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发生了更改(在同一个用户实例上)?如果数据源发生了更改,将数据源设置为新对象应该会自动更新绑定控件。如果绑定属性正在更改。。您需要更改InotifyProperty