Win10开发:构建基于MVVMLight框架的Win10项目

最近开始学习MVVM设计设计模式,关于MVVM的简单介绍可以查看:http://baike.baidu.com/view/3507915.htm

MVVMLight是一个采用MVVM设计模式的比较流行的框架,本文讲解基于MVVMLight框架的Win10项目的搭建

说明一点,不同的程序猿有不同的编程习惯,许多操作因人而异,不一定要完全按照下文的流程使用MVVMLight框架


开始进入主题

1、新建Win10空白项目

2、在解决方案管理器中右键"引用",选择“管理NuGet程序包”。在浏览标签下搜索“MvvmLight”,选择第二个,在右边列表点击安装。(如果在WPF等其他项目中,第一个会在项目中新增一些文件和代码,第二个是纯类库)

Win10开发:构建基于MVVMLight框架的Win10项目_第1张图片

Win10开发:构建基于MVVMLight框架的Win10项目_第2张图片

3、由于MVVMLight框架目前未对Win10应用做适配,因此不会在项目中创建其他的文件,我们需要手动添加

 新增以下文件夹:“ViewModel”、“Model”、“Helper”、“Converters”,“Controls”暂时使用这些文件夹,随着学习的深入再逐渐完善项目结构。每个文件夹的功能如下:

ViewModel:存放不同的ViewModel

Model:存放Model类

Helper:帮助类

Converters:转换类

Controls:自定义控件

4、在ViewModel文件夹下新增ViewModelLocator.cs文件

using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;

namespace MVVMLightDemo.ViewModel
{
    public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            SimpleIoc.Default.Register<MainViewModel>();
        }

        public MainViewModel Main => ServiceLocator.Current.GetInstance<MainViewModel>();

        public static void Cleanup()
        {
        }
    }
}
在ViewModel文件夹下新增MainViewModel.cs文件

using GalaSoft.MvvmLight;
using MVVMLightDemo.Model;
using System.Collections.ObjectModel;

namespace MVVMLightDemo.ViewModel
{
    public class MainViewModel: ViewModelBase
    {
        public MainViewModel()
        {
            Persons = SetItems();
        }

        private ObservableCollection<Person> SetItems()
        {
            var items = new ObservableCollection<Person>();
            for (int i = 0; i < 10; i++)
            {
                Person p = new Person()
                {
                    Name="Name"+i,
                    Age=i
                };
                items.Add(p);
            }
            return items;
        }

        private ObservableCollection<Person> _persons;

        public ObservableCollection<Person> Persons
        {
            get
            {
                return _persons;
            }
            set
            {
                _persons = value;
                RaisePropertyChanged();
            }
        }
    }
}

其中Person是Model文件夹下的一个基础类:

namespace MVVMLightDemo.Model
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

5、在App.xaml文件中添加Locator的引用:

<Application.Resources>
        <loc:ViewModelLocator x:Key="Locator"/>
</Application.Resources>

注意命名空间的使用:

xmlns:loc="using:MVVMLightDemo.ViewModel"

6、修改MainPage.xaml文件

<Page
    x:Class="MVVMLightDemo.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MVVMLightDemo"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    DataContext="{Binding Source={StaticResource Locator}, Path=Main}"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView ItemsSource="{Binding Persons}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Name}"/>
                        <TextBlock Text="{Binding Age}"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Page>



以上代码中要注意数据上下文DataContext的使用,Path=Main是因为在ViewModelLocator类中定义了Main。

7、不用的页面对应不同的ViewModel,如新增一个Page2,需要在ViewModel文件夹下新增Page2ViewModel.cs文件,在ViewModelLocator中新增相应的代码

public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            SimpleIoc.Default.Register<MainViewModel>();
            SimpleIoc.Default.Register<Page2ViewModel>();
        }

        public MainViewModel Main => ServiceLocator.Current.GetInstance<MainViewModel>();
        public Page2ViewModel Page2 => ServiceLocator.Current.GetInstance<Page2ViewModel>();

        public static void Cleanup()
        {
        }
    }

至此,一个简单的基于MVVMLight框架的Win10项目构建完成


你可能感兴趣的:(设计模式,MVVM,win10,UWP)