Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF MVVM从BackgroundWorker更新UI绑定属性_C#_Wpf_Mvvm - Fatal编程技术网

C# WPF MVVM从BackgroundWorker更新UI绑定属性

C# WPF MVVM从BackgroundWorker更新UI绑定属性,c#,wpf,mvvm,C#,Wpf,Mvvm,从Backgroundworker更新ViewModel的UI绑定属性是否存在任何潜在问题?我试图在VM绑定到UI时更新它,用户可能正在键入。。这里的同步是如何工作的(我认为我不能使用XAML中的Lock语句) 提前感谢。根据我对Silverlight的经验,尝试这样做会导致异常 基本上,您需要从dispatcher线程更新绑定属性,就像您直接修改UI一样 为了允许ViewModel在不知道真实的调度程序的情况下执行此操作,我发现创建IDispatcher界面非常有用,然后使用SametRead

从Backgroundworker更新ViewModel的UI绑定属性是否存在任何潜在问题?我试图在VM绑定到UI时更新它,用户可能正在键入。。这里的同步是如何工作的(我认为我不能使用XAML中的Lock语句)


提前感谢。

根据我对Silverlight的经验,尝试这样做会导致异常

基本上,您需要从dispatcher线程更新绑定属性,就像您直接修改UI一样


为了允许ViewModel在不知道真实的
调度程序的情况下执行此操作,我发现创建
IDispatcher
界面非常有用,然后使用
SametReadDispatcher
进行测试,使用
SystemDispatcher
进行生产。然后将IDispatcher作为依赖项传递给ViewModel。

更新标量属性时,不必担心在UI线程上执行此操作。
PropertyChanged
事件将自动编组到UI线程


但是,对于实现了
INotifyCollectionChanged
的集合,将不起作用。
CollectionChanged
事件不会被封送到UI线程,它将导致异常。因此,如果修改绑定到
ItemsControl
的集合,则需要使用
Dispatcher.Invoke
(或其他同步机制)在UI线程上执行此操作。另一种选择是使用专门的集合,负责将事件编组到正确的线程。有关此类集合的示例,请参见。

我不知道Silverlight,但在WPF中,您可以从工作线程毫无问题地更新ViewModel属性,但必须在UI线程上修改集合。。。(详见我的答案)我正在使用Josh Einstein的()AddOnUI更新收藏。但我主要关注MVVM中的对象属性,而MVVM反过来又提供ViewModel的其他属性。