【Prism003】MVVM

简介

  模型-视图-视图模型(MVVM)模式帮助我们将应用程序的业务和表示逻辑与其用户界面(UI)清晰地分离。在应用程序逻辑和UI之间保持清晰的分离有助于解决许多开发和设计问题,并使我们的应用程序更易于测试、维护和拓展。它还可以极大地改善代码重用机会,并允许开发人员和UI设计人员在开发各自的应用程序部分时更轻松地协作。 使用MVVM模式,应用程序的UI以及底层的表示和业务逻辑被分为三个独立的类:视图,它封装了UI和UI逻辑;视图模型,封装表示逻辑和状态;以及封装应用程序的业务逻辑和数据的模型。 【Prism003】MVVM

 

 

  Prism提供了将视图(View)和视图模型(ViewModel)自动绑定的机制,即将ViewModel的实例赋值给View的DataContext属性
<Window x:Class="Demo.Views.MainWindow"
    ...
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="False">
  ViewModelLocator 类提供了附加属性 AutoWireViewModel,当设置为true时,调用ViewModelLocationProvider类中的AutoWireViewModelChanged方法来解析视图的ViewModel,然后将视图的数据上下文设置为该ViewModel的实例。 自动绑定规则:
  • 视图和视图模型在同一程序集下
  • ViewModel位于ViewModels名称空间下
  • View位于Views名称空间下
  • ViewModel类名 = View类名 + “ViewModel”
 

自定义绑定规则

App.xaml.cs中重写ConfigureViewModelLocator方法
protected override void ConfigureViewModelLocator()
{
    base.ConfigureViewModelLocator();

    ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
    {
        var viewName = viewType.FullName.Replace(".ViewModels.", ".CustomNamespace.");
        var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
        var viewModelName = $"{viewName}ViewModel, {viewAssemblyName}";
        return Type.GetType(viewModelName);
    });
}
 

自注册具体绑定,适用于部分绑定不遵循规范

  Type / Type
ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), typeof(CustomViewModel));
  Type / Factory
ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), () => Container.Resolve<CustomViewModel>());
  Generic Factory
ViewModelLocationProvider.Register<MainWindow>(() => Container.Resolve<CustomViewModel>());
  Generic Type
ViewModelLocationProvider.Register<MainWindow, CustomViewModel>();

 

 

上一篇:Git: untrack a file in local repo only and keep it in the remote repo


下一篇:KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)KYOCERA Programming Contest 2021(AtCod