2012-04-17 6 views
2

私のビューには、以下の2つのボタンが含まれます。私のVMでは、WPF Commandパターンによってキャンセル/送信]ボタンを有効にし

<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Button Content="Start" Width="100" Height="30" Margin="20" Command="{Binding OkCommand}"/> 
     <Button Content="Cancel" Width="100" Height="30" Margin="20" Command="{Binding CancelCommand}"/> 
</StackPanel> 

を - 私は、コマンドの傍受を設定しています。

class StockViewModel 
{ 
    #region Properties 
    public ICommand OkCommand { get; set; } 
    public ICommand CancelCommand { get; set; } 
    #endregion 

#region Constructor 
    public StockViewModel() 
    { 
     OkCommand = new myCommand(myOkExecute, myCanOkExecute); 
     CancelCommand = new myCommand(myCancelExecute, myCanCancelExecute); 
    } 
    #endregion 

    private void myOkExecute (object parameter) 
    { 
     ...... 
    } 

    private bool myCanOkExecute(object parameter) 
    { 
     ........ 
    } 

    private bool myCanCancelExecute(object parameter) 
    { 
     ....... 
    } 

    private myCanCancelExecute(object parameter) 
    { 
    ............ 
    } 
    #endregion 


    public class myCommand : ICommand 
    { 

    } 

質問:私は、ボタンの動作はOPPになりたい - 1がクリックされたときに意味(送信)他が無効とその逆によって必要があります。最初にフォームがロードされたとき - Submit btnはデフォルトで有効になっています。

私は複数の方法を試しましたが、これはうまくいかないようです。

ここではプリミティブ/イベントアグリゲーターの概念を使用しないプレーンなMVVMコードを作成しています。

このようなコマンドビヘイビアが一般的にどのように処理されるのか(コードスムージングで)お勧めします。

+0

なぜコマンドがICommand.CanExecuteChangedイベントを発生させることができないのですか? – Rich

+0

更新されたコードを見てください - それはすべての出来事を持っています - そこにbtnStateにアクセスしてそれらをtrueまたはfalseに設定する方法を理解できないようです – Patrick

答えて

3
private bool IsOkToExecute 
    { 
     get { return _isOkToExecute; } 
     set 
     { 
      _isOkToExecute = value; 
      RaisePropertyChanged("IsOkToExecute"); 
     } 
    } 

    private void myOkExecute (object parameter) 
    { 
     IsOkToExecute = false; 
    } 

    private void myCancelExecute(object parameter) 
    { 
     IsOkToExecute = true; 
    } 

private bool myCanOkExecute(object parameter) 
{ 
    return IsOkToExecute; 
} 

private bool myCanCancelExecute(object parameter) 
{ 
    return !IsOkToExecute; 
} 
+0

ありがとうDenis - これは魅力的でした!!!私はいつもボタンの振る舞いをテキストボックス(値が入力されているかどうかにかかわらず)に結びつけて練習してきたので、これは私のために厳しいものになった。一度このソリューションを実装することは完全に意味があります。 ありがとうございました – Patrick

+0

@パトリック、歓迎! –

関連する問題