gpt4 book ai didi

.net - 使用 DispatcherObject.Dispatcher 时如何防止 MVVM 中的循环引用

转载 作者:行者123 更新时间:2023-12-03 10:53:47 25 4
gpt4 key购买 nike

下面的代码非常简化。我正在尝试抽象调度程序上下文,以便我的 View 模型可以同步只能在 GUI 线程上引发的事件。

此模式中有一个循环引用。有没有其他方法可以创建 DispatcherObject ?我做错了吗?

我读过其他类似的问题,但答案似乎都涉及对 DispatcherObject 的引用。在 ViewModel .这是一个可以接受循环引用的地方吗?

class ViewModel {
public DispatcherObject Dispatcher { get; set; }
}

class ModelView : UserControl {

ModelView() {
InitializeComponent();
DataContext = new ViewModel { Dispatcher = this };
}
}

最佳答案

一般来说,循环引用是您要避免的。这里有两种选择:

1.静态抓取dispatcher

快速而肮脏的方法。很容易做到,几乎所有时间都可以正常工作,但与其他任何静态完成的事情一样,它不适合可测试性(这可能是也可能不是问题)。在您的 WPF 应用程序具有多个 UI 线程的极少数情况下,您将无法盲目地使用这种方法。

WPF:var dispatcher = Application.Current.Dispatcher;
银光:var dispatcher = Deployment.Current.Dispatcher;
2.使dispatcher成为ViewModel的依赖

适本地配置你的依赖注入(inject)容器并拥有 Dispatcher成为那些需要访问它的 ViewModel 的依赖项。这种方法更麻烦,但它允许您使用多个 UI 线程,是可测试的,并且通常具有使用 DI 做事的所有常见优点/缺点。

关于.net - 使用 DispatcherObject.Dispatcher 时如何防止 MVVM 中的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com