c# - 使用NServiceBus时,MVVM中的ObservableCollection不变

标签 c# wpf mvvm messaging nservicebus

我的MVVM应用程序中有ObservableCollection的奇怪行为,更确切地说,是负责从NServiceBus接收消息的代码部分:

public class MyViewModel: ViewModelBase, IHandleMessages<CarMoved>
{
 public ObservableCollection<CarData> Cars= new ObservableCollection<CarData>();


 public Task Handle(CarMoved message, IMessageHandlerContext context)
 {
   ...
   Cars.Add(new Car());

   return Task.CompletedTask;
 }

}

因此,我希望Handle方法将一个新对象添加到我的ObservableCollection中,但是对象的数量保持不变。
我创建了测试按钮来检查是否可以使用按钮添加新对象,并且此测试按钮可以正常工作。
我还调试了Handle方法,可以看到当我使用Handle方法时,在Observable集合中对象的数量增加了,但是一旦我离开该方法,所有的一切都会改变-对象的数量返回到旧的数量。

我试图使用Task.Run(..)添加对象。 Task.Wait();假设可能需要一些时间。它没有帮助。

请告知我如何解决此问题以及为什么会发生?

最佳答案

好的,所以这里的问题是NServiceBus将创建ViewModel的新实例来处理消息。这显然不是您想要的。

相反,ViewModel和消息Handler应该是单独的对象。然后,处理程序可以将消息告知ViewModel

我不确定您使用的是哪种MVVM框架,但通常会有某种事件聚合器,用于从NServiceBus处理程序和ViewModels等系统组件传递消息。

关于c# - 使用NServiceBus时,MVVM中的ObservableCollection不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42190105/

相关文章:

c# - 终止 TabletKeyboard(TabTip.exe) 应用程序的进程后,在 wpf 中不会恢复到其原始大小

c# - MVVM 填充组合框(WinRT 和 C#)

c# - 如何使用 Open Xml 2.5 SDK 以只读方式创建(导出)excel 文件

c# - 如何使所选行在未聚焦的数据网格中突出显示?

android - mvvm android 中的存储库可以是单例吗?

c# - 调整控件大小时 Winforms 自动滚动丢失

c# - 将单独的 XAML 导入为 ResourceDictionary 并分配 x :Key

c# - 处理后监控多个 Threading.Timers

c# - 使用 Awesomium 捕获网络错误

c# - WPF 设计器在启动时不运行窗口静态构造函数