INotifyPropertyChanged для свойства свойства

#silverlight #wcf #inotifypropertychanged

#silverlight #wcf #inotifypropertychanged

Вопрос:

Я думаю, что лучший способ описать этот вопрос — на очень простом примере….

Представьте, что у вас есть два класса. Вызовите их Train и Status .

В DomainService for Train у вас есть строка, которая выглядит как:

 [Include]
public Status { get; set;}
  

Status Имеет два свойства: Name и DisplayColor .

  1. Теперь привяжите ObservableCollection Train объекты к DataGrid
  2. Привязать ObservableCollection элемент Status к другому DataGrid .
  3. Затем обновите один из Status объектов.
  4. Есть ли какой-либо способ заставить это изменение автоматически отражаться при DataGrid хранении Train объектов?

Спасибо!!!

Ответ №1:

Я думаю, это то, что вы хотите (при условии, что как служба, так и статус реализуют INotifyPropertyChanged):

 private Status _status;

[Include]
public Status Status
{
  get { return _status; }
  set 
  {
    if (_status == value) return;

    if (_status != null)
       _status.PropertyChanged -= NotifyStatusChanged;

    _status = value;

    // Whatever your implementation of INotifyPropertyChanged looks like.
    RaiseNotifyPropertyChanged(()=> Status);

    if (_status != null)
       _status.PropertyChanged  = NotifyStatusChanged;
  }
}

private void NotifyStatusChanged(object o, EventArgs e) 
{
    // Whatever your implementation of INotifyPropertyChanged looks like.
    RaiseNotifyPropertyChanged(()=> Status);
}