問題タブ [delegatecommand]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4439 参照

wpf - DelegateCommand が「指定されたキャストは無効です」をスローします

パラメータとして bool を指定して PRISM delegatecommand を使用したいと考えています。これは関連するコードです:

ブレークポイントを設定すると、CanExecuteChangeZoomPanヒットすることはありません。問題は の後に発生しChangeZoomPanCommand.RaiseCanExecuteChanged()ます。

これはスタックトレースです:

>

引数の型を文字列に変更すると、すべてが機能するようです。もちろん、それが私のxamlコマンドパラメータであるため、引数として「False」文字列を取得します。T に制限がないように見えるため、これがどの T でも機能しないのはなぜですか。T はオブジェクトまたは nullable でなければならないという難しい方法をすでに見つけましたが、nullable でさえ適合しないようです。ブール引数を使用する方法は?

ありがとう

0 投票する
2 に答える
4102 参照

wpf - Prism: RaiseCanExecuteChanged() を明示的に呼び出す必要があります

以下は、とデリゲートの両方をPrism.Wpf持つ の非常に単純な例です。DelegateCommandExecuteCanExecute

あるプロパティにCanExecute依存するとします。Prismは、他の MVVM フレームワークのように、このプロパティが変更されたときに自動的に条件DelegateCommandを再評価しないようです。代わりに、プロパティ セッターで RaiseCanExecuteChanged() を明示的に呼び出す必要があります。これにより、自明ではないビューモデルで多くの反復コードが発生します。CanExecuteRelayCommand

より良い方法はありますか?

ビューモデル:

ビュー:

0 投票する
1 に答える
324 参照

c# - PRISM (ViewModel): コマンドが同時に複数回実行されないようにする

同じコマンドが同時に複数回実行されないように、頻繁なユーザー ジェスチャを無効にしようとしています。

これが正しいかどうかはわかりません。

  • やり過ぎですかSemaphoreSlim、それとも安全のためにそのままにしておくべきですか?
  • ObservesCanExecute()手動でフラグのオンとオフを切り替えているので必要ですか?
  • 同じビュー モデルにいくつかのコマンドがあり、それぞれに個別の CanExecute フラグがあります。あるコマンドを実行中に別のコマンドを有効にする必要がある場合にすぐに遭遇すると思います。_semaphoreSlim進行中のすべてのコマンドを保留しますか、それとも同じコマンドの複数の呼び出しを保留しますか?
0 投票する
3 に答える
939 参照

wpf - WPF現在アクティブなタブアイテムのコマンドを実行する方法は?

TabControl Regionシェルビュー内でプリズムを使用しています。

それぞれにとTabItemが含まれます。AViewAViewModel

のプロパティプロパティTabItemを使用して、現在アクティブな を特定できます。IsActiveAViewModel

IsActiveプロパティはtrue、現在選択されている TabItem に対してのみに設定されます。

ビュー内にボタンがありShell、ビュー内のロジックを実行しますTabItems

現在のアクティブに応じてボタンを有効にして無効にする正しい方法は何ですかTabItem(セットはまたはに実行commandできます)truefalse、アクティブなビューに対してのみロジックを実行します。他のビューに配置されたボタンから?

commandを作成して を実行し、からcomposite commandにコマンドを登録し、内のボタンを にバインドすることができました。AViewModelcomposite commandshellcomposite command

このアプローチの問題点は、いずれかのコマンドが1 つ(アクティブ)falseを除くすべてを返した場合、どのコマンドも実行されないことです。TabItem

CompositeCommand クラスは、子コマンド (DelegateCommand インスタンス) のリストを維持します。CompositeCommand クラスの Execute メソッドは、各子コマンドの Execute メソッドを順番に呼び出すだけです。同様に、CanExecute メソッドは各子コマンドの CanExecute メソッドを呼び出しますが、実行できない子コマンドがある場合、CanExecute メソッドは false を返します。つまり、デフォルトでは、CompositeCommand は、すべての子コマンドを実行できる場合にのみ実行できます。 ソース