WPF入门教程系列(5)

很简单,仅仅是包含一个实体对象,这边注意的的是那他继承了一个父类: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中的代码

    
        
            
        
    

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
{
    /// 
    /// WelcomeView.xaml 的交互逻辑
    /// 
    public partial class WelcomeView : Window
    {
        public WelcomeView()
        {
            InitializeComponent();
            this.DataContext = new WelcomeViewModel();
        }
    }
}

把 WelcomeViewModel 赋值给当前视图的数据上下文。所以可以在当前视图中使用ViewModel中所有的公开属性和命令。

执行效果如下

WPF入门教程系列(5)_第1张图片

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

WPF入门教程系列(5)_第2张图片

前面讲过,StartupUri用于指定启动窗口,因此只要修改要启动的窗口即可。注意这里的View是工程下的文件夹,如果你的*.xaml与MainWindow在同一级下,就不用带View。 

你可能感兴趣的:(WPF)