WPF应用之MVVMLight框架基础一:框架搭建实操
一、从NuGet引用程序包
步骤:
1.新建WPF应用,目标框架*.Net Framework 4.6*,输出类型Window应用程序。
2.右键引用>管理Nuget程序包>浏览MVVMLight>安装MVVMLight 5.4.1.1。记:不要更新内容,不兼容高版本。
完成:
1.引用中新增四个包:CommonServiceLocator、GalaSoft.MvvmLight、GalaSoft.MvvmLight. Extras、GalaSoft.MvvmLight.Platform 。
2.安装会自动新建文件夹ViewModel,文件夹下两个类MainViewModel、ViewModelLocator,分别为视图模型和定位器。
二、手动新建MVVM祖传目录
1.已有的ViewModel,保存视图模型文件。
2.新建Model文件夹,保存模型文件。
3.新建View文件夹,保存视图文件。
三、新建各个文件下文件
1.Model文件下,新建类MainModel.cs 。
2.View文件下,WPF窗体MainWindow.xaml 。
3.ViewModel文件夹下,MainViewModel.cs 、ViewModelLocator.cs。
四、修改配置和命名空间(App.xaml)
<Application x:Class="MVVMLight.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="View/MainWindow.xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d1p1:Ignorable="d"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MVVMLight.ViewModel" >
<Application.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Application.Resources>
</Application>
五、逻辑编程
1.Model(MainModel.cs)
using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMLight.Model
{
public class MainModel : ObservableObject
{
private double _num0;
public double Num0
{
get { return _num0; }
set
{
_num0 = value;
RaisePropertyChanged(() => Num0);
Result = Num1 + value;
}
}
private double _num1;
public double Num1
{
get { return _num1; }
set
{
_num1 = value;
RaisePropertyChanged(() => Num1);
Result = Num0 + value;
}
}
private double _Result;
public double Result
{
get { return _Result; }
set { _Result = value; RaisePropertyChanged(() => Result); }
}
}
}
2.ViewModel(MainViewModel.cs)
using GalaSoft.MvvmLight;
using MVVMLight.Model;
namespace MVVMLight.ViewModel
{
public class MainViewModel : ViewModelBase
{
#region 模型属性
private MainModel _Main;
public MainModel Main
{
get { return _Main; }
set { _Main = value; RaisePropertyChanged(() => Main); }
}
#endregion
#region 构造函数
public MainViewModel()
{
Main = new MainModel();
}
#endregion
}
}
3.Locator(ViewModelLocator.cs)
using CommonServiceLocator;
using GalaSoft.MvvmLight.Ioc;
namespace MVVMLight.ViewModel
{
/// <summary>
/// This class contains static references to all the view models in the
/// application and provides an entry point for the bindings.
/// </summary>
public class ViewModelLocator
{
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
}
4.View(MainWindow.xaml)
<Window x:Class="MVVMLight.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MVVMLight"
DataContext="{Binding Source={StaticResource Locator},Path=Main}"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Title="加法计算器" Height="200" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="结算结果">
<TextBlock Text="{Binding Main.Result,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" FontSize="20" TextWrapping="Wrap" HorizontalAlignment="Right" VerticalAlignment="Top" ></TextBlock>
</GroupBox>
<GroupBox Grid.Row="1" Header="输入界面">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Width="120" FontSize="20" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Main.Num0,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"></TextBox>
<TextBox Grid.Column="1" Width="120" FontSize="20" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Main.Num1,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"></TextBox>
</Grid>
</GroupBox>
</Grid>
</Window>