2010-04-15 188 views
1

我有一个wpf gui,它在单独的窗口和主应用程序的单独线程中显示信息列表。当用户在主窗口中执行操作时,侧窗被更新。 (例如,如果您在主窗口中单击页面,则侧窗口中的列表框将向下翻页)。wpf命令模式

现在,这个应用程序的体系结构感觉非常混乱,我敢肯定有一个更干净的方式来做到这一点。它看起来像这样:

主窗口包含一个单SideWindowControl与使用事件SideWindowDisplay的实例通信 - 因此,例如,PageDown键按钮会的工作,如:

1)按钮的事件处理程序在主窗口调用SideWindowControl.PageDown()

2)在PageDown()函数中创建并抛出一个事件。 3)终于gui,ShowSideWindowDisplay订阅SideWindowControl.Actions事件处理事件并实际向下滚动列表框 - 注意,因为它在不同的线程中,它必须通过通过Dispatcher.Invoke运行该命令()

这似乎是一个非常混乱的方式,并且必须有一个更清晰的方法(唯一不能改变的部分是主窗口和侧窗必须位于不同的线程上)。也许使用WPF命令?

我真的很感激任何建议!谢谢

回答

1

你可以尝试使用Mediator/Messenger在Views或ViewModels之间发送消息。你可以看看MVVM Light附带的实现,看看它是如何完成的。

的想法是这样的:

  1. 主窗口中,执行行动
  2. 行动触发的视图模型
  3. 命令方法的命令将消息发送到Messenger
  4. 侧窗视图模型订阅
  5. 当消息到达时,在侧窗口VM上触发事件;侧窗相应地起作用。

另一个选择是将两个控件绑定到同一个ViewModel,然后它将包含所有命令并协调这些操作。