win10 uwp MVVM入门

时间:2022-06-14 05:59:13

MVVM 是一个强大的架构,基本从 WPF 开始,wr(我说的就是微软)就提倡使用 MVVM。它可以将界面和后台分离,让开发人员可以不关心界面是怎样,全心投入到后台代码编写中。

然后在编写完后台代码后,可以快速和界面设计师做出来的界面绑定到一起,即使频繁修改界面也几乎不需要去修改后台代码。

更让人喜欢的是,他可以让我们简单地进行单元测试,因为我们可以不打开界面进行测试功能,方便了我们的测试开发。

UWP 虽然可以直接在xaml.cs 写逻辑但是我们是推荐使用 MVVM 框架,写一个自己的框架也很简单。

本文主要:如何在 UWP 使用 MVVM,如何做一个自己的框架。

MVVM 是 View、Model、 ViewModel 合起来的称呼。

View 就是界面。软件中,可以这样看,我们看到的都是界面,看不到的就是后台,在 UWP 中我们说的 View 一般是 page UserControl 等。我们写界面时用 xaml 和 cs 结合起来,做出好看的效果。

ViewModel 是界面的抽象,这里我们不需要去理会界面长什么样,我只需要知道我们需要给界面提供什么。这就是说我们可以不管界面而将业务逻辑抽象出来。ViewModel 可以简单单元测试,因为我们不需要打开界面。

Model 是核心逻辑,有些大神说, Model 只定义数据结构,有些大神说 model 写核心逻辑,这个就仁者见仁智者见智了。我是将核心逻辑写进 Model,如果觉得这样不对,欢迎讨论。

但是我们现在的问题是怎么让 ViewModel 抽象 View,随后简单地把界面联系起来呢?

使用 Binding 即可,这是 WPF 强大的地方,而 UWP 继承并发扬了这些特性。

如果希望知道 MVVM 是如何写 ,戳此链接

关于Model是属于哪些代码所放的地方,我找到一篇博客,在CodeProject,也是最近10月写的,依照他的逻辑,是支持Model写业务逻辑,ViewModel写表示逻辑的看法。请看下面图片,博客在:https://www.codeproject.com/Tips/813345/Basic-MVVM-and-ICommand-Usage-Example

我们下面说下绑定。

绑定

我们有多种方式绑定 ViewModel 。关于 ViewModel 实现的位置有下面几种。

写在xaml.cs,这是最简单的方式,可以使用代码或在xaml绑定DataContent和ViewModel

写成 xaml 静态资源,这个方式我们使用次数还是比较多,可以让 Code 不写代码就可以绑定 DataContent 和ViewModel

写在一个 ViewModel 静态类,我们把其他页面的 ViewModel 统一写到一个 MainViewModel ,而且他是静态或只有一个实例,这样可以在任何地方调用到。

写在 App.xaml 静态资源。这个方式和写在 xaml 差不多,只是可以在 xaml 设置 Page 的 DataContent 。

写在App.xaml一个静态 ViewModelLocate 包括用到的 ViewModel 。这个方式是 MVVMLight 做的,我模仿他的想法,推荐使用这个方法。

下面我简单介绍这几种方式。

最简单的方法,是在xaml.cs 写一个 ViewModel ,假如我们的 ViewModel 叫 Linmodel ,我们可以在 xaml.cs 写类似下面的

public MainPage() { ViewModel = new LinModel(); this.InitializeComponent(); DataContext = ViewModel; } private LinModel ViewModel { set; get; }

我们也可以把 ViewModel 换成其他名字,遇到需要具体什么名称就使用最好的。

注意我们的ViewModel 实现的地方一般是在InitializeComponent之前,也就是放在类的构造的最前或直接如下面一样

private LinModel ViewModel { set; get; }=new LinModel();

这个方式是6之后才有的,初始化值可以写在自动属性定义。 因为我们需要的 ViewModel 几乎不会修改,所以我们还可如下面,去掉set 。很少会在实现 ViewModel 后在别的地方修改。但是我们在后面会看到,我们使用了页面导航传参,传的是 ViewModel ,这时我们就不能设置 set 去掉。但我们可以设置 private set;

private LinModel ViewModel { get; }

因为我们不需要使用 public ,我们就可以这样简单写 ViewModel ,除了需要记得我们的ViewModel 的实现需要在InitializeComponent之前,还需要记得 DataContent 需要在InitializeComponent之后。

DataContent 的另一个写法是写在 xaml ,很简单,这个方法我们要修改ViewModel 的访问private为public,下面代码写在页面Page

DataContext="{Binding RelativeSource={RelativeSource Self},Path=ViewModel}"

RelativeSource 可以绑定到xaml.cs,我们就简单可以从 cs 获得 ViewModel

这是一个简单的方法。