在本文中將示範如何在Windows 8進行MVVM開發,首先我們準備兩個輔助類如下:
ViewModeBase類 :
public class ViewModeBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 屬性變化時觸發事件 /// </summary> /// <param name="propertyName"></param> protected void OnPropertyChanged( string propertyName ) { var handler = this.PropertyChanged; if ( handler != null ) { handler( this, new PropertyChangedEventArgs( propertyName ) ); } } }
DelegateCommand類:
public class DelegateCommand : ICommand { private readonly Action m_exeAction; private readonly Func<bool> m_canExeAction; /// <summary> /// 建構函式 /// </summary> /// <param name="executeAction"></param> /// <param name="canExecuteAction"></param> public DelegateCommand(Action executeAction, Func<bool> canExecuteAction) { m_exeAction = executeAction; m_canExeAction = canExecuteAction; } /// <summary> /// 建構函式 /// </summary> /// <param name="executeAction"></param> /// <param name="canExecuteAction"></param> public DelegateCommand(Action executeAction) : this(executeAction, null) { } /// <summary> /// 判斷是否執行操作 /// </summary> /// <param name="parameter"></param> /// <returns></returns> public bool CanExecute(object parameter) { if (m_canExeAction != null) { return m_canExeAction(); } return true; } /// <summary> /// 是否執行操作的變更發生時 /// </summary> public event EventHandler CanExecuteChanged; /// <summary> /// 執行操作的內容,可以變為Action行為 /// </summary> /// <param name="parameter"></param> public void Execute(object parameter) { if (CanExecute(parameter)) { m_exeAction(); } } protected void OnCanExecuteChanged(object sender, EventArgs args) { var handler = CanExecuteChanged; if ( handler != null ) { handler( this, EventArgs.Empty ); } } public void RaiseCanExecuteChanged() { OnCanExecuteChanged(this, EventArgs.Empty); } }