我有兩個視圖共享某個viewmodel中的一個可觀察集合,但具有不同的集合視圖參數。在MVVM Light中實現它的正確方法是什麼?是否支持非靜態虛擬機?我如何管理他們的一生並處理他們?Static ViewModels vs instanced ViewModels
6
A
回答
0
一些Laurent的examples of MVVM Light使用帶靜態視圖模型實例(單式)一ViewModelLocator的。請注意0接口。此外,非靜態虛擬機通常必須在視圖的構造函數中進行MEFed或構建。
0
對於ViewModels管理通常使用IOC模式。在MVVM Light框架中,它是一個SimpleIoc實現。
我更喜歡使用Ninject - http://www.ninject.org/
1
有!
默認情況下,從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()); }
}
}
您是否使用了DI容器,如統一或MEF? – PVitt 2011-05-13 10:49:05
不,我使用基本的MVVM Light模板。 – 2011-05-13 10:49:59