C# 使用MVVM的异步更新?

C# 使用MVVM的异步更新?,c#,wpf,mvvm,C#,Wpf,Mvvm,我的模型包含一个大型数据对象,我从代码隐藏中更新它(目前这种情况发生在UI线程上,但我打算稍后在worker中这样做)。我的一个窗口具有此模型的viewmodel,并使用IValueConverter输出此数据对象。问题是这种转换需要几秒钟。因此,我需要窗口异步获取更新的数据。如何做到这一点 MyControl.xaml: <UserControl.DataContext> <local:DataViewModel x:Name="dataViewModel"/>

我的模型包含一个大型数据对象,我从代码隐藏中更新它(目前这种情况发生在UI线程上,但我打算稍后在worker中这样做)。我的一个窗口具有此模型的viewmodel,并使用
IValueConverter
输出此数据对象。问题是这种转换需要几秒钟。因此,我需要窗口异步获取更新的数据。如何做到这一点

MyControl.xaml:

<UserControl.DataContext>
   <local:DataViewModel x:Name="dataViewModel"/>
</UserControl.DataContext>
// This triggers my value converter and blocks the UI for several seconds!
dataViewModel.HeavyObject = data;
多线程代码应该放在哪里?它应该是viewmodel或my value converter的一部分吗?

查看绑定的
IsAsync=“True”
,并选中
PriorityBinding


您可以找到有关PriorityBinding的更多信息

如果您可以在视图模型和值转换器之间进行选择,我会投票支持视图模型。但是,我更希望看到您在存储库或客户端服务中长期运行的操作,这些操作负责与您的数据存储交互。

这是否处理对象连续更新两次的情况?即,长时间的操作A开始,新的更新触发新的长时间操作B,A完成,B完成。在这种情况下,A不感兴趣!我尝试了
IsAsync=True
,我的转换器似乎得到了一个已释放的值:[System.ObjectDisposedException]={“无法访问已释放的对象。”}??您能告诉我们哪个对象已被释放吗?发送到IValueConverter的值。我用谷歌搜索了一下,似乎转换器不应该执行冗长的操作。相反,转换应该在viewmodel发布的工作线程中进行。这种方法听起来熟悉吗?(除此之外,您的
IsAsync
提示就足以作为答案。)在viewmodel中使用它总是更好:)客户端服务?这是一种常见的模式吗?你知道这方面的一些好教程吗?这在我从事的许多项目中都很常见:)。它将数据交互的责任放在专门的本地“服务”中。这项服务可以被整个应用程序使用,也可以更精细:比如说,每个视图模型一个。如果您熟悉MVC,它很像一个存储库。我不知道有什么教程,但是Dino Esposito使用这个,所以也许搜索会产生一些好的结果。