如何使用Catel Mvvm动态确定视图模型

时间:2016-01-23 03:56:29

标签: catel

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源代码中找到这个方法。

1 个答案:

答案 0 :(得分:1)

GetViewModelType已过时。如果你在文档中找到它,请告诉我在哪里,然后我会将其删除(或者随意自行远程,它可以为所有人编辑)。

您可以在应用启动时注册这样的自定义视图模型映射:

var dependencyResolver = this.GetDependencyResolver();
var viewModelLocator = dependencyResolver.Resolve<IViewModelLocator>();

viewModelLocator.RegisterView<MyDrawingView, RectangleViewModel>();

如果您希望它更具动态性,您可以实现自己的IViewModelFactory,您可以根据传入的模型返回正确的视图模型。