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

  • 相关阅读:
    php中strstr、strrchr、substr、stristr四个函数的区别总结
    Python
    PHP Date()函数详细参数
    mysql插入数据时,中文乱码
    mysql中类似indexOf的方法LOCATE()
    获取某个文件夹中所有txt文件
    响应式图片布局
    响应式表格布局
    css媒体类型
    html+css调用服务器端字体
  • 原文地址:https://www.cnblogs.com/zouzf/p/2581781.html
Copyright © 2011-2022 走看看