如何使用Catel Mvvm动态确定视图模型
how to dynamically determine the view model using Catel Mvvm
Catel MVVM 框架是一个非常好的mvvm 框架,它自动将视图映射到视图模型,为我的日常工作节省了大量时间。
现在我遇到了一个问题,我想在运行时将一个视图映射到几个视图模型,我搜索了catel官方文档,发现它说:
”
使用 UserControl 时动态确定视图模型非常容易。您可以像这样覆盖 GetViewModelType(object) 方法:
protected override Type GetViewModelType(object dataContext)
{
if (dataContext is Rectangle)
{
return typeof (RectangleViewModel);
}
if (dataContext is Circle)
{
return typeof (CircleViewModel);
}
return null;
}
但是不知道在哪里覆盖上面的GetViewModelType,我什至没有在Catel源代码中找到这个方法。
GetViewModelType 已过时。如果你在文档中找到它,请告诉我在哪里,然后我会删除它(或者你自己远程远程它,它对每个人都是可编辑的)。
您可以在应用程序启动时像这样注册自定义视图模型映射:
var dependencyResolver = this.GetDependencyResolver();
var viewModelLocator = dependencyResolver.Resolve<IViewModelLocator>();
viewModelLocator.RegisterView<MyDrawingView, RectangleViewModel>();
如果您希望它更加动态,您可以实现自己的 IViewModelFactory
,您可以在其中 return 基于传入模型的正确视图模型。
Catel MVVM 框架是一个非常好的mvvm 框架,它自动将视图映射到视图模型,为我的日常工作节省了大量时间。 现在我遇到了一个问题,我想在运行时将一个视图映射到几个视图模型,我搜索了catel官方文档,发现它说:
” 使用 UserControl 时动态确定视图模型非常容易。您可以像这样覆盖 GetViewModelType(object) 方法:
protected override Type GetViewModelType(object dataContext)
{
if (dataContext is Rectangle)
{
return typeof (RectangleViewModel);
}
if (dataContext is Circle)
{
return typeof (CircleViewModel);
}
return null;
}
但是不知道在哪里覆盖上面的GetViewModelType,我什至没有在Catel源代码中找到这个方法。
GetViewModelType 已过时。如果你在文档中找到它,请告诉我在哪里,然后我会删除它(或者你自己远程远程它,它对每个人都是可编辑的)。
您可以在应用程序启动时像这样注册自定义视图模型映射:
var dependencyResolver = this.GetDependencyResolver();
var viewModelLocator = dependencyResolver.Resolve<IViewModelLocator>();
viewModelLocator.RegisterView<MyDrawingView, RectangleViewModel>();
如果您希望它更加动态,您可以实现自己的 IViewModelFactory
,您可以在其中 return 基于传入模型的正确视图模型。