Wpf 使用另一个线程的事件启动ViewModel的DependencyProperty更改

Wpf 使用另一个线程的事件启动ViewModel的DependencyProperty更改,wpf,multithreading,events,dependency-properties,Wpf,Multithreading,Events,Dependency Properties,我想将ViewModel的DependencyProperty从连接应用程序到数据库的类更改为 此类引发事件,这些事件应启动对我的ViewModel中某些属性的更改 我怎么能意识到这一点?我没有视图的调度程序。解决此问题的一个直接方法是捕获视图的调度程序,并在创建视图时将其存储在视图模型上,以便您可以调用/开始调用对它的更改以响应事件 这样说,你应该考虑让你的VIEW模型使用CLR属性而不是依赖属性来改变IntIfyPyrType,以避免像这样的问题。这样,任何线程都可以对视图模型进行更改,并将

我想将ViewModel的DependencyProperty从连接应用程序到数据库的类更改为

此类引发事件,这些事件应启动对我的ViewModel中某些属性的更改


我怎么能意识到这一点?我没有视图的调度程序。

解决此问题的一个直接方法是捕获视图的调度程序,并在创建视图时将其存储在视图模型上,以便您可以调用/开始调用对它的更改以响应事件


这样说,你应该考虑让你的VIEW模型使用CLR属性而不是依赖属性来改变IntIfyPyrType,以避免像这样的问题。这样,任何线程都可以对视图模型进行更改,并将结果反映在视图中。

该问题的一个直接解决方案是捕获视图的调度程序,并在创建视图模型时将其存储在视图模型上,以便您可以调用/开始调用对其所做的更改以响应事件


这样说,你应该考虑让你的VIEW模型使用CLR属性而不是依赖属性来改变IntIfyPyrType,以避免像这样的问题。这样,任何线程都可以对viewmodel进行更改,并将结果反映在视图中。

我假设您的viewmodel上没有依赖属性,而是具有引发
PropertyChanged
事件的普通C属性

如果是这样,你应该已经没事了。从后台线程修改属性(显然存在正常的并发问题),当属性绑定到WPF元素的依赖属性时,运行时系统将负责将更改编组到适当的线程(通过使用视图的Dispatcher对象)

这适用于普通属性,我不确定它是否适用于可观察集合


在viewmodels内部进行编组也有不同的方法。最简单的方法是将的值存储在viewmodel的构造函数中。只要您的viewmodels是在UI线程上创建的,它就可以工作。

我假设您的viewmodels上没有依赖属性,而是具有引发
PropertyChanged
事件的普通C属性

如果是这样,你应该已经没事了。从后台线程修改属性(显然存在正常的并发问题),当属性绑定到WPF元素的依赖属性时,运行时系统将负责将更改编组到适当的线程(通过使用视图的Dispatcher对象)

这适用于普通属性,我不确定它是否适用于可观察集合


在viewmodels内部进行编组也有不同的方法。最简单的方法是将的值存储在viewmodel的构造函数中。只要您的viewmodels是在UI线程上创建的,它就可以工作。

问题是,我不在UI线程中创建ViewModel。我使用一个“DialogService”来创建视图和视图模型的实例。好的,DialogService是在同一个线程上创建视图和虚拟机的(我猜是这样的)。此外,在任何一种情况下,如果您将PropertyChanged属性绑定到视图的DPs,那么您应该已经很好了—无需手动封送anything@elairo:我认为主要问题是您在不同的线程上创建视图,这不是一个好主意。问题是,我没有在UI线程中创建ViewModel。我使用一个“DialogService”来创建视图和视图模型的实例。好的,DialogService是在同一个线程上创建视图和虚拟机的(我猜是这样的)。此外,在任何一种情况下,如果您将PropertyChanged属性绑定到视图的DPs,那么您应该已经很好了—无需手动封送anything@elairo:我认为主要问题是您在不同的线程上创建视图,这不是一个好主意。