c# - Caliburn Micro 发布/订阅

标签 c# wpf caliburn.micro publish-subscribe

我正在完成以下教程 http://www.mindscapehq.com/blog/index.php/2012/2/1/caliburn-micro-part-4-the-event-aggregator/ 我目前停留在发布/订阅部分。

我已完成所有设置,因此它实际上应该发布事件,但订阅 View 模型没有收到消息。

我已完成以下操作:

发布 View 模型:

[Export(typeof(ColorViewModel))]
public class ColorViewModel : PropertyChangedBase
{
    private readonly IEventAggregator events;

    [ImportingConstructor]
    public ColorViewModel(IEventAggregator events)
    {
        this.events = events;
    }

    public void Red()
    {
        this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Red)));
    }

    public void Green()
    {
        this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Green)));
    }

    public void Blue()
    {
        this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Blue)));
    }
}

订阅ViewModel:

[Export(typeof(AppViewModel))]
public class AppViewModel : PropertyChangedBase, IAppViewModel, IHandle<ColorEvent>
{
    private IEventAggregator events;

    [ImportingConstructor]
    public AppViewModel(ColorViewModel colorViewModel, IEventAggregator events)
    {
        this.ColorViewModel = colorViewModel;

        this.events = events;
        this.events.Subscribe(this);
    }

    public ColorViewModel ColorViewModel { get; private set; }

    private SolidColorBrush color;

    public SolidColorBrush Color
    {
        get
        {
            return this.color;
        }

        set
        {
            this.color = value;
            this.NotifyOfPropertyChange(() => this.Color);
        }
    }

    public void Handle(ColorEvent message)
    {
        this.Color = message.Color;
    }
}

ColorView 上有 3 个单选按钮,我可以单击它们,然后进入 Red()、Green()、Blue() 方法,以便调用 PublishOnUIThread。 但我从未到达 AppViewModel 的 Handle(ColorEvent) 方法。

我是否遗漏了某些内容,或者为什么在发布 ColorEvents 后我的处理方法没有被调用?

提前致谢

最佳答案

事件聚合器来自哪里?它是在 AppViewModelColorViewModel 之间共享的同一个实例吗?

确保事件聚合器在依赖注入(inject)器中注册为单例。

关于c# - Caliburn Micro 发布/订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079745/

相关文章:

c# - 不能在 Silverlight 中使用 SHA-512?

c# - 无法使用 SQLite 与 EF6 比较日期

.net - 将 System.Drawing.Font.Size 转换为 WPF FontSize

c# - WPF-单击后如何隐藏下拉菜单

wpf - 通过绑定(bind)启用 TabItem

c# - 使用 Caliburn.Micro 将命令绑定(bind)到 ListView 内的按钮

c# - WPF Caliburn.Micro - 在单一窗口应用程序中导航的最佳方式

c# - JSON 不反序列化

c# - HttpRequestMessage.GetClientCertificate() 在 Web API 中返回 null

wpf - WPF 中 .NET (Rx) 的响应式扩展 - MVVM