0

I am working with MVVM application using MVVM light. Here I have 2 Views and related ViewModels like Header and Orders

 public ObservableCollection<HeaderViewModel> HeaderControls
    {
        get { return _header ?? (_header = new ObservableCollection<HeaderViewModel>()); }
    }

    public ObservableCollection<object> ViewControls
    {
        get { return _viewControls ?? (_viewControls = new ObservableCollection<object>()); }
    }

I am loading these ViewModels in observable collection to load related views.

  private void LoadControls()
    {
        this.HeaderControls.Clear();
        var headerViewModel = new HeaderViewModel();
        this.HeaderControls.Add(headerViewModel);

        this.ViewControls.Clear();
        var orderViewModel = new OrdersViewModel();
        this.ViewControls.Add(orderViewModel);
    }

Now OrderViewModels have few properties like text fields, grid, those I want to update via click of icons on HeaderViewModel.

I have also tried the solution posted on, but it does not helped : Accessing Properties in other ViewModels in MVVM Light

4

1 回答 1

0

Model<->VM<->View 之间的 MVVM Light 中的通信通常是通过Messenger类进行的。

简而言之,Messenger允许您从一个类向另一个类发送“消息”(可以是字符串、整数、几乎任何您想要的类型)。接收者订阅接收这些消息(基于它想要获取的消息类型或通过谁发送它和类型的组合)。同样,发送者也可以只向特定的其他类或订阅该消息类型的任何人发送消息。

的主要优点之一Messenger是它基于弱依赖,因此您不必在 VM<->View 之类的东西之间创建强依赖关系,从而忠于 MVVM 原则。它也有据可查,您应该能够从以下链接中获得“如何使用它”的充分帮助:

MVVM Light - Messenger 是什么?

MVVM Light Toolkit Messenger V2

甚至这个答案

正如我在那个答案中提到的,其中下载示例显示的概念之一是“使用自定义消息类型 OpenWindowMessage 的 Messenger 类使用”。您可以看到正在发送的消息如何是自定义类型,以及 VM 如何订阅/发送和处理这些消息。

边注:

从您发布的代码中很难确定这一点,但是您创建一个ObservableCollection<object> ViewControls. 我看到您正在向其中添加 a OrdersViewModel,那么为什么不是仅OrdersViewModel用于集合的类型,甚至是ViewModelBase. ViewModelBase无论如何,您的所有虚拟机都应该继承。

于 2013-09-08T16:37:27.923 回答