Привязка данных WPF к изменяющемуся объекту - PullRequest
6 голосов
/ 08 мая 2009

У меня есть пользовательский элемент управления, который отображает имя пользователя, вошедшего в систему. Я связал TextBlock в элементе управления со свойством UserId объекта User в моем приложении.

Проблема, с которой я столкнулся, заключается в том, что объект «Пользователь», привязанный к моей привязке в качестве источника, меняется каждый раз при входе нового пользователя.

Я могу придумать решение, в котором я запускаю событие, когда объект пользователя изменяется, и это захватывает мой контроль, который затем повторно инициализирует привязку, но это кажется не идеальным.

Есть ли решение этой проблемы, я чувствую, что оно должно быть очень распространенным?

Приветствия

Джеймс

1 Ответ

8 голосов
/ 08 мая 2009

Большинство привязок пользовательского интерфейса уже обрабатывают это с помощью уведомлений о свойствах, в частности (для 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», то оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...