WPF应用之MVVMLight框架基础一:框架搭建实操

WPF应用之MVVMLight框架基础一:框架搭建实操

一、从NuGet引用程序包
步骤:
1.新建WPF应用,目标框架*.Net Framework 4.6*,输出类型Window应用程序
2.右键引用>管理Nuget程序包>浏览MVVMLight>安装MVVMLight 5.4.1.1。记:不要更新内容,不兼容高版本。

完成:
1.引用中新增四个包:CommonServiceLocatorGalaSoft.MvvmLightGalaSoft.MvvmLight. ExtrasGalaSoft.MvvmLight.Platform
2.安装会自动新建文件夹ViewModel,文件夹下两个类MainViewModelViewModelLocator,分别为视图模型和定位器。

二、手动新建MVVM祖传目录
1.已有的ViewModel,保存视图模型文件。
2.新建Model文件夹,保存模型文件。
3.新建View文件夹,保存视图文件。

三、新建各个文件下文件
1.Model文件下,新建类MainModel.cs
2.View文件下,WPF窗体MainWindow.xaml
3.ViewModel文件夹下,MainViewModel.csViewModelLocator.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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值