2012-08-30 81 views
12

我正在使用一些简单的数据绑定我的Windows手机应用程序。我已经创建了一个基于MvvM编程方法的应用程序。我正在使用的应用程序也使用MvvM方法。因为我想让我的代码保持尽可能干净,所以我正在寻找一种方法来使“按钮单击事件”(通常发生在代码隐藏页面中)发生在我的viewmodel或mainviewmodel中。将一个按钮绑定到一个命令(Windows Phone 7.5)

我已经搜索了互联网需要Icommand界面的简单解释,因为我相信这就是要走的路。我发现的解释有问题,其中一些是基于使用CommandRelay函数的MvvMlight工具包。我不想使用MvvM灯光工具箱,因为我想先了解自己的事情。我发现的其他教程是由过度兴奋的开发人员撰写的,这些开发人员会给你提供一些矫枉过正的信息。

很基本。有人可以向我展示绑定到按钮的Icommand的最简单版本的工作原理吗?

回答

21

在您的XAML:

<Button Content="My Button" Command="{Binding MyViewModelCommand}" /> 

在您的视图模型:

public class MyViewModel 
{ 

    public MyViewModel() 
    { 
     MyViewModelCommand = new ActionCommand(DoSomething); 
    } 

    public ICommand MyViewModelCommand { get; private set; } 

    private void DoSomething() 
    { 
     // no, seriously, do something here 
    } 
} 

INotifyPropertyChanged和省略的其他视图模型寒暄。
在本答案的底部显示了在视图模型中构建命令的另一种方法。

现在,您需要执行ICommand。我建议先从简单的东西就是这样,和扩展或实现其他功能如必要/命令:

public class ActionCommand : ICommand 
{ 
    private readonly Action _action; 

    public ActionCommand(Action action) 
    { 
     _action = action; 
    } 

    public void Execute(object parameter) 
    { 
     _action(); 
    } 

    public bool CanExecute(object parameter) 
    { 
     return true; 
    } 

    public event EventHandler CanExecuteChanged; 
} 

这里是布局视图模型的另一种方式:

public class MyViewModel 
{ 
    private ICommand _myViewModelCommand; 
    public ICommand MyViewModelCommand 
    { 
     get 
     { 
      return _myViewModelCommand 
       ?? (_myViewModelCommand = new ActionCommand(() => 
       { 
        // your code here 
       })); 
     } 
    } 
} 
+0

谢谢周杰伦这是正是我正在寻找:)飞机和简单:) –

2

为了增加蓝鸟答案:

我所有的时间最喜欢的是从模式与实践团队@微软DelegateCommand。检查出this post欲知更多信息。