C# WPF数据绑定到正在更改的对象

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

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

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

我可以想出一个解决方案,当用户obejct发生变化时触发一个事件,然后由我的控件捕获,然后重新初始化绑定,但这似乎不太理想

有没有解决这个问题的办法,我觉得一定很普遍吧

干杯


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