我正在开发一个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语句。它会起作用,但呃。
有关如何解决此问题的任何建议?
答案 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)
{
...
}