构建程序导航

时间:2012-08-27 22:15:05

标签: c# wpf caliburn.micro

我正在开发一个WPF应用程序,我使用Caliburn-Micro来处理MVVM管道。我使用CM中的Event Aggregator来监听导航事件。目前,事件之间没有任何共性。所以我有一个OrderNavigationEvent,QuoteNavigationEvent,PriceBookNavigationEvent等......

我想过在一些枚举中创建一个通用的NavigationEvent类,它具有我需要的所有导航事件的所有不同类型。类似的东西:

public enum NavigationDestinations
{
    Orders,
    Quotes,
    PriceBook
}

public enum NavigationOptions
{   
    Open,
    New,
    Listing
}

public class NavigationEvent
{
    public NavigationDestinations NavigationDestination {get; set;}
    public NaviationOptions NavigationOption {get; set;}
    public int Id {get; set;}
}

然后我可以设置一个Handle(NavigationEvent消息),然后归结为一大堆IF语句。它会起作用,但

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

我不建议创建一个具有 NO 通用性的事件类的“基础”类。你打破了单一责任原则。你的三个事件发布时需要做一些不同的事情。

我建议将它们分开并将_eventAggregator.Publish( class )调用到类中,然后让订阅者从中订阅。

如果您在一个班级中需要三个这样的活动,那么做三个 IHandle<OrderNavigationEvent>, IHandle<QuoteNavigationEvent>, IHandle<PriceBookNavigationEvent>

然后让课程订阅 _eventAggregator.Subscribe(this); ,然后你就可以取消对它的多重IF检查,并在发布某个事件时专注于某项功能

然后,每个事件都有三个不同的句柄

public void Handle(QuoteNavigationEvent eventArgs)
{
  ...
}

public void Handle(OrderNavigationEvent eventArgs)
{
 ...
}

public void Handle(PriceBookNavigationEvent eventArgs)
{
 ...
}