很简单,仅仅是包含一个实体对象,这边注意的的是那他继承了一个父类:ObservableObject,这个父类的作用就是保证能够检测属性是否被改变。其实在继承的过程中,可能会遇到一个问题:ObservableObject无法被继承,解决方案是加一个using GalaSoft.MvvmLight;命名空间。ObservableObject实现了INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的;所以我们在定义实体对象的时候,只需要调用RaisePropertyChanged(PropertyName)就可以进行属性更改通知了。所以实体里面定义的每个属性都加上RaisePropertyChanged(PropertyName)的调用,就可以实现对UI的交互更新了。
2、写一个VideModel,来负责跟View的交互。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GalaSoft.MvvmLight;
using MvvmLight1.Model;
namespace MvvmLight1.ViewModel
{
class WelcomeViewModel:ViewModelBase
{
public WelcomeViewModel()
{
//welcome = new WelcomeModel() { Introduction="Hello World!"};
welcome = new WelcomeModel();
welcome.Introduction = "Hello World!";
}
#region 属性
private WelcomeModel welcome;
public WelcomeModel Welcome
{
get { return welcome; }
set { welcome = value;RaisePropertyChanged(() => Welcome); }
}
#endregion
}
}
在敲代码的过程中,我发现c#和c++很相似,c++中的#include和c#中的using 是一个意思,在当前类中调用另一个文件中的属性(类似c++中的成员函数)方法是首先要包含源文件中命名空间,然后在当前类中实例化一个对象,并new,最后用当前的实例化对象调用其他文件中的属性并赋值。
此代码也很简单,包含了一个命名为Welcome的WelcomeModel属性,继承了ViewBaseModel父类,ViewBaseModel同时继承 ObservableObject类和ICleanup接口。所以他同样有INotifyPropertyChanged接口的能力,能够通过触发PropertyChanged事件达到通知View的目的;
构造函数中对 Welcome 属性进行了实例化。
3、写一个View,来显示和交互ViewModel。
每一个View其实就是一个MainWindow。如果你新建的工程中没有View文件夹,你可以选择在当前工程下右击“添加”-》新建文件夹,将此文件更名为View。
在view下鼠标右键“添加”-》“新建项”-》“窗口”,影子随意更改,注意更改名字时不要随意删除后缀名,这时会出现一个窗体:
修改WelcomeView.xaml中的代码
<Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock Text="{Binding Welcome.Introduction}" FontSize="30" ></TextBlock>
</StackPanel>
</Grid>
extBlock 绑定了 Welcome.Introduction,所以应该显示Welcome对象下的Introduction属性。
这时候的ViewModel和View是没有任何关系的,所以我们在code-Behind的构造函数中写上如下代码(在WelcomeView.xaml.cs文件中修改):
using MVVMLightDemo.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace MVVMLightDemo.View
{
/// <summary>
/// WelcomeView.xaml 的交互逻辑
/// </summary>
public partial class WelcomeView : Window
{
public WelcomeView()
{
InitializeComponent();
this.DataContext = new WelcomeViewModel();
}
}
}
把 WelcomeViewModel 赋值给当前视图的数据上下文。所以可以在当前视图中使用ViewModel中所有的公开属性和命令。
执行效果如下

如果你的运行结果和上图不一样,即仍然是工程自带的效果图,你可以尝试用如下方法修改:

前面讲过,StartupUri用于指定启动窗口,因此只要修改要启动的窗口即可。注意这里的View是工程下的文件夹,如果你的*.xaml与MainWindow在同一级下,就不用带View。
本文详细介绍了如何使用MVVM模式和C#语言创建一个简单的应用程序,包括实体对象的定义、ViewModel的编写以及View的展示。通过实例展示了ObservableObject的使用,以及如何通过属性更改通知UI更新。
1433

被折叠的 条评论
为什么被折叠?



