zoukankan      html  css  js  c++  java
  • wp7 mvvm模式学习之Command命令绑定

    mvvm模式的原来之类的就不说了,作为新手的我也说不清楚,下面只是说一下如何实现,作为学习笔记,仅供整理思路用。

    1、项目结构如下,因为是简单示例,就没有弄model了,简单的数据在viewmodel里搞定

    2、viewmodel 的内容,

    首先要定义一个实现 ICommand接口的类,代码如下,这里定义的是一个泛型类

     1     public class MainCommand<T> : ICommand
     2     {
     3         private Action<T> _execute;//定义一个 Action<T> 类型的委托,用于命令执行时
     4         private Func<T, bool> _canExecute;//定义一个 Func<T,bool>类型的委托,用于判断是否执行命令时使用
     5 
     6         public MainCommand(Action<T> execute)
     7         {
     8             this._execute = execute;
     9         }
    10 
    11         public MainCommand(Action<T> execute, Func<T, bool> canExecute)
    12         {
    13             this._execute = execute;
    14             this._canExecute = canExecute;
    15         }
    16 
    17 
    18         public bool CanExecute(object parameter)
    19         {
    20             //委托非空时调用
    21             if (this._canExecute != null)
    22             {
    23                 return this._canExecute((T)parameter);
    24             }
    25 
    26             return true;
    27         }
    28 
    29         public event EventHandler CanExecuteChanged;
    30 
    31         public void Execute(object parameter)
    32         {
    33             //委托非空时调用
    34             if (this._execute != null)
    35             {
    36                 this._execute((T)parameter);
    37             }
    38         }
    39     }

    然后,是viewmodel类的内容。这里命令执行的内容很简单,只是弹出一个对话框

     1     public class MainViewModel
     2     {
     3         public ICommand myCommand { set; get; }//定义命令属性
     4          public MainViewModel()
     5         {
     6             myCommand = new MainCommand<object>(ShowMessage,CanShow);
     7         }
     8 
     9         //命令执行的主体
    10         private void ShowMessage(object str)
    11         {
    12             MessageBox.Show(str.ToString());
    13         }
    14 
    15         //判断是否执行命令
    16         private bool CanShow(object param)
    17         {
    18             //这里不做判断,简单返回true
    19             return true;
    20         }
    21     } 


    3、xaml文件的代码:

    先添加命名空间:xmlns:MainVM="clr-namespace:Demo_MVVM_Command.MainViewModel"

    定义DataContext:<Grid.DataContext>
                                    <MainVM:MainViewModel />
                              </Grid.DataContext>

    绑定命令:<Button Command="{Binding myCommand}" CommandParameter="Test123" Content="Test" />

    所有代码如下:

     源代码:http://www.t00y.com/file/8256068

  • 相关阅读:
    ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
    Oracle中NVARCHAR2字符集不匹配问题
    数据库读写分离
    oracle存储过程获取异常信息码和异常信息
    js删除字符串的最后一个字符三种方法
    我弄的一些TASKER配置
    分享我用Taker做任务时需要的各种资源的精华帖,方便查阅
    Tasker 正则表达式测试器
    支持Tasker控制的app合集
    Tasker文件夹说明
  • 原文地址:https://www.cnblogs.com/zouzf/p/2581781.html
Copyright © 2011-2022 走看看