【问题标题】:How to include Listener type class in the WPF/MVVM pattern?如何在 WPF/MVVM 模式中包含 Listener 类型类?
【发布时间】:2012-10-30 22:26:20
【问题描述】:

想象一下,您有一个 Listener 类,它将在应用程序启动时使用 Connect 方法连接到某个服务器,然后它开始收听消息,并在收到的每条消息上引发事件 OnRecievedMessage。根据这些消息,您需要更新视图模型,从而更新视图。更重要的是你必须在新线程上运行 Listen() 方法才能不阻塞 UI,所以事件 OnRecievedMessage 也会在这个新线程上运行。

您如何将此类类合并到 WPF/MVVM 应用程序的结构中,以及如何将其与视图模型连接?

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    在这种情况下,我不会使用事件 - 我会公开 IObservable<T> 因为 IObservable 将是一个对象,并且可以轻松地传递给您获得的函数并从函数返回:

    • 轻松将其注入到您的 Viewmodel 中
    • 过滤/映射并分派到 UI 线程
    • 更轻松地解开处理程序(Dispose 与“-=")

    所以不要传递你的“Listener”类 - 传递你在那里实现/公开的 IObservable!

    请务必查看Rx-Framework

    【讨论】:

    • thx,我会看看那个框架,但现在如果我必须使用事件怎么办,因为这是类可以响应收到的消息的唯一方式,我无法访问代码来改变它行为
    • 您可以将事件包装到 IObservable ... 所以 np.如果您无法更改侦听器 - 只需创建一个包装器
    • 所以监听器应该被包裹在 iobservable 类中并且 viewmodel 应该实现 iobserver?这样我才有意义。
    • 是的,你可以这样做——或者你可以在你的监听器中创建一个 IObservable-Property 和/或将 IObservable 作为你的 Viewmodels 构造函数的参数(注入接口)——这样 Viewmodel 不能实现 IObserver。
    • 非常感谢我现在明白了,这将导致成功合并
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多