MVVM模式及最简单的实例

WPF创建最简单的MVVM实例

1、创建Views \ViewModels\Models 

MVVM模式及最简单的实例

2、

MVVM模式及最简单的实例

3、创建model

MVVM模式及最简单的实例

4、创建ViewModel 最重要的点

viewModel 代码

using MVVMDemo.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MVVMDemo.ViewModels
{
    class MainWindowViewModel : INotifyPropertyChanged
    {
        public MainWindowViewModel()
        {
            UserCollection = new ObservableCollection<UserInfo>
            {
                new UserInfo {Name ="CQZ1",IdentifiedNumber ="4211"},
                new UserInfo {Name ="Duke",IdentifiedNumber ="4212"},
                new UserInfo {Name ="CQZ2",IdentifiedNumber ="4213"},
                new UserInfo {Name ="CQZ3",IdentifiedNumber ="4214"},
                new UserInfo {Name ="CQZ4",IdentifiedNumber ="4215"}
            };
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private UserInfo m_selectedUser;
        public UserInfo SelectedUser
        {
            get { return m_selectedUser; }
            set
            {
                m_selectedUser = value;
                OnPropertyChanged("SelectedUser");
            }
        }

        private ObservableCollection<UserInfo> m_userCollection;
        public ObservableCollection<UserInfo> UserCollection
        {
            get { return m_userCollection; }
            set
            {
                m_userCollection = value;
                OnPropertyChanged("UserCollection");
            }
        }
    }
}
 

5、View 数据绑定

<Window x:Class="MVVMDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewmodels="clr-namespace:MVVMDemo.ViewModels"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <viewmodels:MainWindowViewModel x:Key="ViewModel"/>
    </Window.Resources>
    <DockPanel Margin="10">
        <DockPanel.DataContext>
            <viewmodels:MainWindowViewModel/>
        </DockPanel.DataContext>
        <StackPanel Orientation ="Vertical" DockPanel.Dock="Left">
            <ListBox Width="200" Height="150" ItemsSource="{Binding UserCollection}" SelectedItem="{Binding SelectedUser}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <Run Text="{Binding Name}"/>
                            <Run Text="{Binding IdentifiedNumber}"/>
                        </TextBlock>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
            <TextBlock DataContext="{Binding SelectedUser}">
                <Run Text="User:"/>
                <Run Text="{Binding Name}"/>
                <Run Text="{Binding IdentifiedNumber}"/>
            </TextBlock>
        </StackPanel>
    </DockPanel>

</Window>

 

一、MVVM介绍

  MVVM是Model-View-ViewModel(模型-视图-视图模型)的缩写形式,它通常被用于WPF或Silverlight开发。我们可以通过下图来直观的理解MVVM模式:  

MVVM模式及最简单的实例

 

  1、View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展现给用户。

  2、ViewModel是一个C#类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。

  3、Model,就是系统中的对象,可包含属性和行为。

  三者之间的关系:View对应一个ViewModel,ViewModel可以聚合N个Model,ViewModel可以对应多个View

二、MVVM的优势

      MVVM的根本思想就是界面和业务功能进行分离,View的职责就是负责如何显示数据及发送命令,ViewModel的功能就是如何提供数据和执行命令。各司其职,互不影响。在实际的业务场景中我们经常会遇到客户对界面提出建议要求修改,使用MVVM模式开发,当设计的界面不满足客户时,我们仅仅只需要对View作修改,不会影响到ViewModel中的功能代码,减少了犯错的机会。随着功能地增加,系统越来越复杂,相应地程序中会增加View和ViewModel文件,将复杂的界面分离成局部的View,局部的View对应局部的ViewModel,功能点散落在各个ViewModel中,每个ViewModel只专注自己职能之内的事情。ViewModel包含了View要显示的数据,并且知道View的交互代码,所以ViewModel就像一个无形的View。使用MVVM架构具有以下优势

1、易维护

2、灵活扩展

3、易测试

4、用户界面设计师与程序开发者能更好的合作