[MVVM]02-MVVMLight页面前后台消息和命令传递

10 篇文章 0 订阅
5 篇文章 0 订阅

title: ‘[MVVM]02-MVVMLight页面前后台消息和命令传递’
date: 2017-11-25 20:46:50
tags:

MVVMLight页面前后台消息和命令传递

场景

  • 一个文本框一个按钮点击按钮把文本框的内容弹出来

操作

  1. 建立View和ViewMode之间的关系
  • 就是指定窗口xaml的Datacontext也就是窗口上下文为ViewMode类
    可以直接通过绑定来实现
 <Application.Resources>
    <ResourceDictionary>
      <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:MyMvvmLight.ViewModel" />
    </ResourceDictionary>
  </Application.Resources>
  //这个构造器通过nuget是自动安装的但是在uwp不会自动安装,通过lib安装也不会生成
   DataContext="{Binding Main, Source={StaticResource Locator}}"  
     
  • 可以通过构造函数
  public MainView()
           {
               this.DataContext = new MainViewModel();// find correct wife
           }   
  • 也可以通过xaml文件来实现两者之间的关联
 <Window.DataContent>
        <vm:ViewModel />
</Window.DataContent>

  1. UI的部分就在xaml文件和xaml文件的cs文件中
 <TextBox Width="100" Text="{Binding Txt,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Margin="246,41,171,65" Background="LightBlue" />
        <Button Width="100" Height="30" Command="{Binding ShowTxtCommand}" Content="ShowTxtCommand" Margin="0,100,0,0"></Button>
  1. viewMode可以专心写逻辑,这个需求不用model层,后面的例子会讲到
 //初始化命令
            ShowTxtCommand = new RelayCommand(ShowMsg, CanShowMsgExecute);
             private string _txt;

        /// <summary>
        /// 绑定到界面的Txt
        /// </summary>
        public string Txt
        {
            get
            {
                return _txt;
            }
            set
            {
                _txt = value;
                RaisePropertyChanged(() => Txt);
            }
        }

 /// <summary>
        /// 命令具体实现
        /// </summary>
        private void ShowMsg()
        {
            MessageBox.Show(Txt);
        }

        /// <summary>
        /// 显示消息命令是否可以执行
        /// </summary>
        /// <returns></returns>
        private bool CanShowMsgExecute()
        {
            return !string.IsNullOrEmpty(Txt);
        }

提示

  • RelayCommand是对wpf命令的包装,实现了命令的一些基本操作
  • 本文的第一个参数就是消息令牌,第二个参数就是按钮(命令的发出者能不能发命令)这里我们可以看到如果文本框没有内容那按钮是不可以用的,所有的操作都在绑定和命令实现过了。有多重载参考官文
  • mvvmlight命令模式如果发现有问题,是这框架有点问题,已修复过了引用
    using GalaSoft.MvvmLight.CommandWpf;而不是用//using GalaSoft.MvvmLight.Command;
    wup一定要用//using GalaSoft.MvvmLight.Command;
  • 一定不要用Click事件,来实现上面相关的功能,你想想你要初始化的时候检查文本框的内容,还要建立两个控件的直接引用关系,而且还要在文本框更改事件下修改按钮的状态。还要进行一系列的检测。
  • 当然不用命令也可以实现功能,但是命令模式是不优势的,用了wpf的先进的技术却不接受这新新的开发思想,用老的东西思路开发,会让功能和效率有点折扣。也影响开发效率。这里写图片描述
    源码

技术开发一定要配套,为何有很多语言有很多不好的设计却不修复,就因为有很多人用那样不正规的开发手段来开发东西,走在规则的边缘来进行开发。语言一定要用正确的方式打开。潘多拉的盒子大家懂的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值