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

 

posted @ 2012-07-08 19:47  仙外仙  阅读(458)  评论(0编辑  收藏  举报