Отражение изменения свойства от одной ViewModel к другой - PullRequest
1 голос
/ 31 марта 2011

У меня есть это приложение WPF / MVVM, которое представляет собой TabControl с кучей вкладок. Когда приложение загружается, загружаются данные для всех вкладок. Есть некоторые вычисления, которые сделаны на Tab1, который зависит от значений из Tab2. то, что происходит, когда я ввожу / изменяю данные на tab2, это просто не отражается на Tab1, когда я нажимаю на Tab1. под капотом, вычисления сделаны правильно, но это не отражается на tab1. Я должен перейти на главную вкладку, чтобы перезагрузить все данные, чтобы отразить изменения. Есть идеи, как это реализовать?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Если две разные ViewModel должны показывать одинаковые данные / значение, они должны привязываться к одной и той же ViewModel.

Я думаю, что добавление привязки между ViewModels - это плохо, потому что оно вводит много зависимостей.

Если свойство одной ViewModel зависит от другого свойства той же ViewModel, вы можете использовать уведомление об изменении свойства, как указано в ответе Дэвида.

2 голосов
/ 01 апреля 2011

Вам необходимо реализовать INotifyPropertyChanged в свойствах данных модели представления. Затем попросите вашу модель представления подписаться на событие (метод Initialize() вызывается конструктором модели представления):

private void Initialize()
{

    // Subscribe to events
    this.PropertyChanging += OnPropertyChanging;
    this.PropertyChanged += OnPropertyChanged;
    this.Books.CollectionChanging += OnBooksCollectionChanging;
}

Обработчик модели представления для события может затем обновить любые свойства, которые необходимо обновить:

void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    switch(e.PropertyName)
    {
        case "FirstProperty":
             this.SomeOtheProperty = whatever;
            break;

        case "Another property":
            this.YetAnotherProperty = somethingElse;
            break;
    }
}

Это должно сделать работу.

...