我有两个视图,它们共享来自特定视图模型的一个可观察集合,但具有不同的集合视图参数。在MVVM Light中实现它的正确方法是什么?是否支持非静态虚拟机?我如何管理它们的生命周期并处理它们?
发布于 2013-08-09 20:06:18
的确有!
默认情况下,从SimpleIoc解析的对象是单例。要解决这个问题,您需要传递一个惟一的标识符作为ServiceLocator.GetInstance方法的参数。
如下所示:
我们有两个属性返回相同的视图模型。一个返回单例,另一个每次返回一个新实例。
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()); }
}
}发布于 2011-06-08 04:38:33
Laurent的一些examples of MVVM Light使用带有静态ViewModel实例的ViewModelLocator (类似于单例)。请注意ICleanup接口。此外,非静态VM通常必须在视图的构造函数中进行MEFed或构造。
发布于 2013-08-09 16:31:56
对于ViewModels管理,通常使用IOC模式。在MVVM Light框架中,它是一个SimpleIoc实现。
我更喜欢使用Ninject - http://www.ninject.org/
https://stackoverflow.com/questions/5990704
复制相似问题