gpt4 book ai didi

c# - 静态 ViewModel 与实例化 ViewModel

转载 作者:太空狗 更新时间:2023-10-29 21:59:22 30 4
gpt4 key购买 nike

我有两个 View 共享来自某个 View 模型的一个可观察集合,但具有不同的 Collection View 参数。在 MVVM Light 中实现它的正确方法是什么?是否支持非静态虚拟机?我如何管理它们的生命周期并处置它们?

最佳答案

有!

默认情况下,从 SimpleIoc 解析的对象是单例。要解决此问题,您需要将唯一标识符作为 ServiceLocator.GetInstance 方法的参数传递。

见下文:

我们有两个属性返回相同的 View 模型。一个返回单例,另一个每次返回一个新实例。

class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}

SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<SecondViewModel>();
}


public MainViewModel MainAsSingleton
{
get { return ServiceLocator.Current.GetInstance<MainViewModel>(); }
}

public MainViewModel MainAsDiffrentInstanceEachTime
{
get { return ServiceLocator.Current.GetInstance<MainViewModel>(Guid.NewGuid().ToString()); }
}
}

关于c# - 静态 ViewModel 与实例化 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990704/

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