如何使用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 基于传入模型的正确视图模型。