WPF、MVVM和Prism学习历程

面对从天而降的两个专有名词,今日我开始了漫漫Mvvm和Prism的学习之路。

之前一直在做WinForm的开发,本身WPF就接触的不多,更别提Siverlight了。

好了说正题。


首先是进行5个小时左右的Silverlight学习,资料来源是Lynda.com.Silverlight.5.Essential.Training

主要要学习的核心内容包括

  • XAML(eXtensible Application Markup Language),可扩展应用程序标记语言
  • Dependency Property,依赖属性
  • DataBinding,数据绑定

通俗来讲,XAML就是用XML的形式将界面“画”出来,DP则是Property的增强版,数据绑定则是建立传输数据的通道。


XAML拥有丰富的特性让你实现各种UI上的变化,让设计师们能充分的发挥自己的特长,本人不是设计师,所以这块就简单看过。

DP对应依赖属性,包含依赖属性的类,就叫做依赖对象,WPF中所有的UI控件都是依赖对象。所谓依赖属性和依赖对象,从原理上将,依赖对象的属性不是常年驻扎在内存中的,而是需要时实例化,这样对系统而言就大大减少了以往的大量对内存的占用。另外,依赖属性可以充分发挥数据绑定的优势。

数据绑定主要是针对UI自己以及UI和模型之间的数据绑定,建立这些数据的通道,可以实现模型和界面之间的自动交互(无需在写事件处理代码)


我理解所谓的MVVM,就是利用数据绑定和依赖属性的特性而实现的这种自动的数据交互。

首先,我先看了刘大神的这个关于MVVM的入门视频《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)

视频很模糊,但基本概念讲的很清晰,跟着视频一起写一遍代码基本就能对MVVM了解个差不多了。

构造MVVM的时候,主要便是ViewModel类和Command类的建立。
Command类实现接口ICommand(UI将来也是通过ICommand来实现命令绑定),对命令的执行、参数、判断条件等进行个性化的配置。

ViewModel类主要负责数据的承载,Command命令的实现,这个类需实现接口INotifyPropertyChanged以实现数据变化的通知。ViewModel的数据为自己的依赖属性,也可以是依赖属性对应的依赖类的依赖属性(O.O有点绕?)。ViewModel中定义的ICommand属性可以看成是命令的依赖属性,绑定的则是UI中的事件。


至此,MVVM的基本原理就算是完成了,至于Prism,我理解是微软提供的一套封装好了的MVVM程序集,类似的还有MVVMlight等,通过对其提供的程序集的应用,可以更高效的实现MVVM程序的搭建。


参考的学习资料:

《深入浅出WPF》

《Prism4》

Prism4的样例程序

《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)

In the Box - MVVM Training Extension for VS.NET

以下是一个基于PrismWPF MVVM示例,其中包含模型: 首先,创建一个名为“Models”的文件夹,并在其中添加一个名为“Person.cs”的类: ```csharp using System; namespace PrismExample.Models { public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public string Email { get; set; } } } ``` 接下来,创建一个名为“ViewModels”的文件夹,并添加一个名为“MainViewModel.cs”的类。该类将作为我们的主界面的视图模型: ```csharp using Prism.Commands; using Prism.Mvvm; using PrismExample.Models; namespace PrismExample.ViewModels { public class MainViewModel : BindableBase { private Person _person; public Person Person { get { return _person; } set { SetProperty(ref _person, value); } } public DelegateCommand SaveCommand { get; private set; } public MainViewModel() { Person = new Person(); SaveCommand = new DelegateCommand(Save); } private void Save() { // 保存Person信息的代码 } } } ``` 最后,创建一个名为“Views”的文件夹,并在其中添加一个名为“MainWindow.xaml”的文件。在该文件中,我们将使用数据绑定将视图模型绑定到UI元素: ```xaml <Window x:Class="PrismExample.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:PrismExample.ViewModels" Title="MainWindow" Height="350" Width="525"> <Window.DataContext> <vm:MainViewModel /> </Window.DataContext> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" Content="First Name:" /> <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Person.FirstName, UpdateSourceTrigger=PropertyChanged}" /> <Label Grid.Row="1" Grid.Column="0" Content="Last Name:" /> <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Person.LastName, UpdateSourceTrigger=PropertyChanged}" /> <Label Grid.Row="2" Grid.Column="0" Content="Age:" /> <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Person.Age, UpdateSourceTrigger=PropertyChanged}" /> <Label Grid.Row="3" Grid.Column="0" Content="Email:" /> <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Person.Email, UpdateSourceTrigger=PropertyChanged}" /> <Button Grid.Row="4" Grid.Column="1" Content="Save" Command="{Binding SaveCommand}" /> </Grid> </Window> ``` 现在,运行应用程序,并尝试在文本框中输入一些信息,然后单击“保存”按钮,即可成功保存Person信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值