1

コピー/貼り付けなどの標準の WPF コマンドを見ると、それらはすべて 1 つのボタンを使用して機能し、テキスト ボックスに作用するように見えます。

私の質問: ボタンが 1 つある場合にコマンドを使用するにはどうすればよいですか?ただし、データを 2 つの別々のコントロール (テキストボックスとコンボボックス) に設定する必要があります。ユーザーがテキストボックスにテキストを書き込んでいて、コンボボックスの値を選択していない場合、CanExecute は失敗するはずです。これは、コンボボックスが設定されている場合に適用されますが、テキストボックスには適用されません。

特に私の場合、これらのコントロールはすべて tabitem にラップされています。同様に、テキスト ボックスとボタンのみの別のタブもあります。最初のタブと同じ機能を持たせたいのですが、コンボボックスの値をチェックする代わりに、コンボボックスがないことを検出し、代わりにデフォルトの「null オブジェクト」値を渡す必要があります。

Execute メソッドはビューモデルのメソッドを呼び出し、コンボボックスとテキスト ボックスから値を渡す必要があります。同様に、各タブは別の一意の静的値を渡す必要があります。私はコマンドパラメータを使用してこれを処理できると思います。

どうすればこれを機能させることができますか? commandtarget の親タブを作成し、can/execute メソッドでその子コントロールを直接参照する必要がありますか?

4

1 に答える 1

0

TextBox データバインディング値と ComboBox.SelectedItem データバインディング値の両方をチェックする CanExecute メソッドを実装する必要があります。

あなたの質問から例を挙げてください。

TextBox.Text は、ViewModel および ComboBox にデータバインディングする必要があります。したがって、ViewModel には 2 つのプロパティが必要です。

public string TextBoxCurrentText {get { ...}set {...}}
public string ComboBoxCurrentSelected {get { ...}set {...}}

次に、両方のセッターで、あなたはあなたのことをしますYourCommmand.RaiseCanExecuteChanged();

そのため、CanExecute コードを実行して、ボタンをクリックできるかどうかを判断します。次のいずれかになります。

    bool YourCommandCanExecute()
    {
//Just example
        if (!string.IsNullOrEmpty(TextBoxCurrentText) && !string.IsNullOrEmpty(ComboBoxCurrentSelected))
            return true;
         return false;
    }
于 2012-02-27T21:32:57.387 に答える