如何从MVVMCross中的另一个ViewModel捕获事件

时间:2017-05-19 22:22:31

标签: c# wpf mvvm

我有两个ViewModel类,其中一个是主ViewMode(A),另一个是对话框ViewModel(B)。 所以当我关闭B时,我需要在A中捕获事件。 我把事件发给了B,就像下面的代码一样。

public event EventHandler OnSelectEmployee;
public void SelectedEmployee(long employeeId)
        {
            foreach (EmployeeModel item in Employees)
                if (item.id == employeeId)
                {
                    Employee = item;
                    break;
                }
            if (OnSelectEmployee != null)
                OnSelectEmployee(Employee, EventArgs.Empty);
        }

并且这个代码来自A。

private void AttemptSelectEmployee()
        {
            ShowViewModel<SelectEmployeeViewModel>(new { key = Customer.id });
        }

我需要在A中捕获OnSelectEmployee事件。 怎么能抓住这个事件?

3 个答案:

答案 0 :(得分:1)

在MVVMCross中,要在viewmodel之间进行通信,你必须使用Messenger插件:

https://www.mvvmcross.com/documentation/plugins/messenger?scroll=959

基本上在视图模型A上订阅消息,然后在模型B中发送消息,当您想要通知A发生了某些事情时。

答案 1 :(得分:-1)

不熟悉MVVMCross,但大多数MVM模式依赖于Queue在ViewModel之间传递信息。一个简单的Singleton模式,它也暴露像Observer模式之类的事件。然后,您可以在每个之间订阅和发布。

答案 2 :(得分:-1)

看起来有些倒退。你尝试的方式似乎你想要一个依赖注入,但我怀疑你想这样做。但是,您可以将ViewModel A中的事件订阅到ViewModel B中的方法,并以这种方式调用它。