繁体   English   中英

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

[英]How to catch event from another ViewModel in MVVMCross

我有两个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事件。如何捕获该事件?

在MVVMCross中,要在视图模型之间进行通信,您必须使用Messenger插件:

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

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

不熟悉MVVMCross,但是大多数MVM模式都依赖Queue在ViewModel之间传递信息。 一个简单的Singleton模式,也可以像Observer模式一样公开事件。 然后,您可以在每个之间进行订阅和发布。

看起来有点倒退。 您正在尝试的方式似乎想要进行依赖项注入,但是我怀疑您想这样做。 但是,您可以将ViewModel A中的Event订阅到ViewModel B中的方法,然后以这种方式调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM