2

My View には、次の 2 つのボタンが含まれています。

<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>

私の VM では、コマンド インターセプトがセットアップされています。

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
   {

   }

質問: ボタンの動作を反対にしたい - つまり、一方がクリック (送信) されたときにもう一方が無効になり、その逆も同様です。フォームが初めてロードされるとき - 送信ボタンはデフォルトで有効になっています。

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

ここでは単純な MVVM コードを実行しています - プリズム/イベント アグリゲーターの概念はありません。

そのようなコマンドの動作が一般的にどのように処理されるかを(コードサンプルで)推奨できますか?

4

1 に答える 1

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;
}
于 2012-04-17T22:27:47.803 に答える