C# 如何在WPF/MVVM模式中包含侦听器类型类?

C# 如何在WPF/MVVM模式中包含侦听器类型类?,c#,wpf,mvvm,C#,Wpf,Mvvm,假设您有一个侦听器类,它将在appstart上使用connect方法连接到某个服务器,然后它开始侦听消息,并在收到的每个消息上引发event onreceivedmessage。根据这些消息,您需要更新viewmodels,而viewmodels又会更新视图。此外,为了不阻塞UI,您必须在新线程上运行Listen()方法,所以EventOnReceivedMessage也将在这个新线程上运行 如何将此类类合并到WPF/MVVM应用程序的结构中,以及如何将其与viewmodel连接?在这种情况下,

假设您有一个侦听器类,它将在appstart上使用connect方法连接到某个服务器,然后它开始侦听消息,并在收到的每个消息上引发event onreceivedmessage。根据这些消息,您需要更新viewmodels,而viewmodels又会更新视图。此外,为了不阻塞UI,您必须在新线程上运行Listen()方法,所以EventOnReceivedMessage也将在这个新线程上运行


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

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

  • 轻松地将其注入到Viewmodel中
  • 筛选/映射并分派到UI线程
  • 更容易地解开处理程序(Dispose vs.“-=”)
所以不要到处传递你的“Listener”类——传递你在那里实现/公开的IObservable


一定要看一下

thx,我会看一下这个框架,但现在如果我必须使用event怎么办,因为这是类可以响应接收到的消息的唯一方式,我无法访问代码来改变它的行为,你可以将事件包装成一个IObservable。。。所以np。如果您不能更改侦听器-只需创建一个包装器,那么侦听器应该包装在iobservable类中,viewmodel应该实现iobserver?是的,你可以这样做-或者你可以在你的侦听器中创建一个IObservable属性和/或将IObservable作为Viewmodels构造函数的参数(注入接口)-这样Viewmodel就不能实现IObserver。非常感谢,我现在明白了,这将导致成功的合并