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