反映从一个ViewModel到另一个ViewModel的属性更改

时间:2011-03-31 19:27:37

标签: wpf mvvm viewmodel

我有这个WPF / MVVM应用程序,TabControl有一堆标签。加载应用程序时,将加载所有选项卡的数据。 Tab1上有一些计算依赖于Tab2的值。发生的事情是,当我在tab2上输入/更改数据时,当我点击Tab1时,它根本不会反映在Tab1上。在引擎盖下,计算正确,但它没有反映在tab1上。我必须转到主选项卡重新加载所有数据以反映更改。任何想法如何实现这一点?

2 个答案:

答案 0 :(得分:2)

您需要在视图模型数据属性上实现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;
    }
}

那应该完成工作。

答案 1 :(得分:2)

如果两个不同的 ViewModel需要显示相同的数据/值,则它们应该绑定到同一个ViewModel。

我认为在ViewModels之间添加绑定很糟糕,因为它引入了很多依赖项。

如果单个ViewModel的属性依赖于相同 ViewModel的其他属性,则可以使用David的答案中提到的属性更改通知。