c# - Caliburn micro ViewModel 没有从另一个 ViewModel 接收消息

标签 c# mvvm caliburn.micro

在我使用 Caliburn.micro 框架学习 MVVM 之后......我正在尝试像这样通过 EventAggregator 通信两个 View 模型发送数据(“没有意义”的代码,仅用于测试):

MainWindowViewModel.cs

namespace TOP
{
[Export(typeof(MainWindowViewModel))]
public class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
    readonly IWindowManager windowManager;
    private readonly IEventAggregator events;
    private bool _Logged;

    [ImportingConstructor]
    public MainWindowViewModel(IWindowManager windowManager, IEventAggregator events)
    {
        DisplayName = "TOP";
        this.events = events;
        events.Subscribe(this);
        this.windowManager = windowManager;
        windowManager.ShowDialog(new LoginViewModel(events));

    }

    public bool Logged
    {
        get { return _Logged; }
        set
        {
            _Logged = value;
            if(_Logged== true) 
                InitiateApp();
        }
    }

    public void Handle(LoginEvent message)
    {
        Logged = message.Logged;
    }

    private void InitiateApp() {
        ActivateItem(new TwoWindowViewModel());
        }
    }
}

登录 View 模型.cs
namespace TOP{ 

 [Export(typeof(IScreen))]
    public class LoginViewModel : Screen
    {
        private readonly IEventAggregator _events;

        [ImportingConstructor]
        public LoginViewModel(IEventAggregator events)
        {

           DisplayName = "Login";
           _events = events;
           Login();
        }


       public void Login()
       {
           _events.Publish(new LoginEvent(true));
       }
    }
}

登录事件.cs
    namespace TOP
    {
        public class LoginEvent
        {
           public LoginEvent(bool logged) 
           {
               Logged = logged;
           }

         public bool Logged { get; private set; }
    }
}

为什么 MainWindowViewModel 的 Handle 方法没有从 LoginViewModel 中获取已发布的消息?

谢谢你的回复。

最佳答案

您的 MainWindowViewModel需要执行IHandle<LoginEvent> .您已经使用正确的签名定义了该方法,因此您只缺少实际告诉编译器您实现接口(interface)的部分:

public class MainWindowViewModel
    : Conductor<IScreen>.Collection.OneActive, IHandle<LoginEvent>

更多信息请访问 the documentation .

关于c# - Caliburn micro ViewModel 没有从另一个 ViewModel 接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18974284/

相关文章:

c# - 使用 PostMessage 发送 Unicode 字符

c# - 在 javascript 中使警报消息安全的最佳方法

mvvm - 为什么 param 在这个 lambda 表达式中?

c# - 是否有一种干净的方法来处理 WPF 应用程序中的单位(度数、弧度等)转换

c# - 如何从 program.cs 中的 appsettings 读取 UrlPrefixes - asp.net core 3.1

c# - C# 中的 "extension methods"是什么意思?

.net - 如何实现干净的代码隐藏文件?

ExtJs 如何在ViewModel字段中绑定(bind)网格记录?

wpf - Calburn Micro - IoC 未在 WPF 设计器中初始化

wpf - 使用 Caliburn Micro 约定将 ViewModel 本身绑定(bind)到 DataTemplate 内