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源代码中找到这个方法。
答案 0 :(得分:1)
GetViewModelType已过时。如果你在文档中找到它,请告诉我在哪里,然后我会将其删除(或者随意自行远程,它可以为所有人编辑)。
您可以在应用启动时注册这样的自定义视图模型映射:
var dependencyResolver = this.GetDependencyResolver();
var viewModelLocator = dependencyResolver.Resolve<IViewModelLocator>();
viewModelLocator.RegisterView<MyDrawingView, RectangleViewModel>();
如果您希望它更具动态性,您可以实现自己的IViewModelFactory
,您可以根据传入的模型返回正确的视图模型。