解决此问题的一个好方法是在“Viewmodel-Locator”类中创建和共享您的视图模型,就像在MVVM-Light Framework 的代码模板中一样。MVVM Light 带有一个小型 IOC 容器,用于管理视图模型和服务的实例化。这是一些示例代码:首先以静态方式注册您的服务和视图模型:
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
//Resgister your Services
SimpleIoc.Default.Register<IDataService, SomeDataService>();
// Register your Viewmodels
SimpleIoc.Default.Register<SomeViewModel>();
}
为每个注册的 Viewmodel 创建一个属性,以便从 viewmodelLocator 类外部访问它们:
public SomeViewModel SomeVM
{
get
{
return ServiceLocator.Current.GetInstance<SomeViewModel>();
}
}
接下来,例如在 App.xaml 中创建一个全局资源,以访问 XAML 中的 ViewmodelLocator 类。
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>
在您的视图中绑定您的数据上下文,如下所示:
DataContext="{Binding SomeVM, Source={StaticResource Locator}}"
最后,在您的视图模型类中,您可以访问您的服务并执行您需要执行的任何操作:
class SomeViewModel
{
private IDataService mDataService;
public SomeViewModel(IDataService _dataService)
{
mDataService = _dataService;
// Do the fancy stuff...
}
}
希望这有帮助!