WPF MVVM 模式:
MVVM模式:MVVM模式实际是为了view层和业务逻辑解耦,类比MVC对比asp.net 的提升,viewModel 起到了controller的作用,返回给view层数据
WPF创建最简单的MVVM实例
1、创建Views \ViewModels\Models
2、
3、创建model
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模式:
1、View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展现给用户。
2、ViewModel是一个C#类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。
三者之间的关系:View对应一个ViewModel,ViewModel可以聚合N个Model,ViewModel可以对应多个View
MVVM的根本思想就是界面和业务功能进行分离,View的职责就是负责如何显示数据及发送命令,ViewModel的功能就是如何提供数据和执行命令。各司其职,互不影响。在实际的业务场景中我们经常会遇到客户对界面提出建议要求修改,使用MVVM模式开发,当设计的界面不满足客户时,我们仅仅只需要对View作修改,不会影响到ViewModel中的功能代码,减少了犯错的机会。随着功能地增加,系统越来越复杂,相应地程序中会增加View和ViewModel文件,将复杂的界面分离成局部的View,局部的View对应局部的ViewModel,功能点散落在各个ViewModel中,每个ViewModel只专注自己职能之内的事情。ViewModel包含了View要显示的数据,并且知道View的交互代码,所以ViewModel就像一个无形的View。使用MVVM架构具有以下优势