wpf命令模式

时间:2010-04-15 17:39:18

标签: c# wpf design-patterns

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

现在,这个应用程序的架构感觉非常混乱,我确信有一个更简洁的方法来做到这一点。它看起来像这样:

主窗口包含一个单独的SideWindowControl,它使用事件与SideWindowDisplay的实例进行通信 - 例如,向下翻页按钮的工作方式如下:

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

2)在PageDown()函数中创建并抛出一个事件。

3)最后gui,ShowSideWindowDisplay正在订阅SideWindowControl.Actions事件处理事件并实际滚动列表框 - 注意因为它在不同的线程中它必须通过Dispatcher.Invoke运行命令来做到这一点( )

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

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

1 个答案:

答案 0 :(得分:1)

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

这个想法是这样的:

  1. 主窗口执行操作
  2. 操作在ViewModel中触发命令
  3. 命令方法向Messenger发送消息
  4. 侧窗ViewModel订阅
  5. 当消息到达时,在侧窗VM上触发事件;侧窗行动相应。
  6. 另一种选择是将两个控件绑定到同一个ViewModel,然后包含所有命令并协调操作。