MVVM模式中ICommand在ViewModel中的應用


MVVM在wpf,sliverlight,window phone中開發中作用很不錯,

最近學習了這個博友的文章,sliverlight中使用mvvm

這個文章主要記錄如何在ViewModel中使用ICommand

Icommand定義如下:

namespace System.Windows.Input
{
// 摘要:
// 為命令定義協定。
public interface ICommand
{
// 摘要:
// 當出現影響是否應執行該命令的更改時發生。
event EventHandler CanExecuteChanged;

// 摘要:
// 定義用於確定此命令是否可以在其當前狀態下執行的方法。
//
// 參數:
// parameter:
// 此命令使用的數據。如果此命令不需要傳遞數據,則該對象可以設置為 null。
//
// 返回結果:
// 如果此命令可以執行,則為 true;否則為 false。
bool CanExecute(object parameter);
//
// 摘要:
// 定義在調用此命令時調用的方法。
//
// 參數:
// parameter:
// 此命令使用的數據。如果此命令不需要傳遞數據,則該對象可以設置為 null。
void Execute(object parameter);
}
}

 

自定義一個RelayCommand類,繼承ICommand類

 public class RelayCommand : ICommand
{
private Action _handler;

     //Action是一個委托方法,所有的放到都可以傳遞進來,在Execute中執行。
public RelayCommand(Action handler)
{
this._handler = handler;
}
//如果返回false,綁定的控件就會呈現不可使用的效果
public bool CanExecute(object parameter)
{
return true;
}

public event EventHandler CanExecuteChanged;

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


定義ViewModel,使用ICommand

public class PersonViewModel
{
public List<Person> Human { get; set; }
public PersonViewModel()
{
Human = new Persons().getPerson();
}

private ICommand _testCommand;
public ICommand TestCommand
{
get
{
return _testCommand = new RelayCommand(TestMethod);//或者執行使用delegate方式寫方法代碼,不用傳方法名
}
}

public void TestMethod()
{
MessageBox.Show("hello world");
}
}

 

在View頁面簡單的添加一個Button控件

 <Button Name="btnTest" Content="Button Test" Command="{Binding TestCommand}"></Button>

在View頁面的后置代碼中

簡單的實例化一個ViewModel

 PersonViewModel personView = new PersonViewModel();

把當前頁面的數據上下文和Viewmodel關聯

this.DataContext = personView;

然后ViewModel和View就綁定好,ViewModel中的TestCommand命令就和頁面上Button按鈕綁定到了一起

運行模擬器,點擊按鈕就會執行TestCommand命令,彈出“hello world”對話框

 

如果控件沒有Command屬性,那么需要在后置代碼中使用代碼來綁定Command事件

如果CanExecute返回false,就會發現按鈕控件呈現不可使用的灰色效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM