gpt4 book ai didi

c# - 如何将多个 View 的DataContext设置为ViewModel的一个实例

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

我正在为我的 View 使用ViewModelLocator,它是通过以下方法在Bootstrapper中配置的:

protected override void ConfigureViewModelLocator()
{
base.ConfigureViewModelLocator();

ViewModelLocationProvider.Register<ViewA, ViewABViewModel>();
ViewModelLocationProvider.Register<ViewB, ViewABViewModel>();
}

它工作正常,但为我的2个 View 制作了一个ViewModel的两个单独实例。
我希望我的两个 View 都使用相同的ViewModel实例。

最佳答案

检查source code显示默认情况下为每个 View 创建新实例的问题:

static Func<Type, object> _defaultViewModelFactory = type => Activator.CreateInstance(type);

Prism允许通常为所有类型或仅特殊类型定义此方法。第二种情况应该是首选。
ViewModelLocationProvider.Register<ViewA, ViewABViewModel>();

仅将View和ViewModel的类型链接在一起,未定义工厂。这意味着将为每个 View 创建一个新实例。要在多个 View 上使用实例,您需要定义工厂方法。创建一个ViewModel实例
ViewABViewModel vm = new ViewABViewModel();

并通过返回此已经准备好的实例为您的 View 注册工厂方法
ViewModelLocationProvider.Register<ViewA>(() => vm);
ViewModelLocationProvider.Register<ViewB>(() => vm);

Prism现在正在采用此实例,而不是创建一个新实例。

关于c# - 如何将多个 View 的DataContext设置为ViewModel的一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45848540/

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