問題タブ [icommand]
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.
silverlight - イベントのイベント引数を取得して、プリズム経由で Silverlight コマンドを実行しますか?
イベントをトラップするために動作が添付された Prisms Commands を使用する SL3 のデータ フォームがあります。
(このブログ投稿にかなり厳密に従っています: http://blogs.southworks.net/dschenkelman/2009/04/18/commands-with-attached-behavior-for-silverlight-3-dataform/#comment-607 )
基本的に、それはすべて接続され、正常に動作していますが、ビューモデルでは、イベントのイベント引数にアクセスする方法がわかりません。
VM のコンストラクターで、delegate コマンドを定義します。
しかし、何をする必要があるかを定義できるように、DataFormItemEditEndedEventArgs プロパティにアクセスする必要がありますか? ユーザーがキャンセルまたはコミットしたかどうかに応じて、さまざまなアクションを実行したいと考えています。
wpf - ICommand と RoutedCommand
Command
ボタンプロパティをカスタム コマンドにバインドしてみましょう。
いつ実装ICommand
し、いつから派生する必要がありRoutedCommand
ますか? RoutedCommand が ICommand を実装していることがわかります。
どのような場合に実装する必要がありICommand
ますか? MVVMモデルはどうですか?この目的にはどちらが適していますか?
silverlight - Silverlight の MVVM (ICommand)
この質問が以前に議論されたか、近くの巨大なプリズムおよび mvvm ブログで間接的に回答されたかどうかを厳密に判断しないでください。RelayCommand または DelegateCommand クラスの WPF 実装には、そのようなイベント ハンドラがあります。
ただし、名前空間の SL サブセットには CommandManager クラスはありません。そして、これは私が立ち往生しているところです。SL への MVVM の採用では、これに対する回避策をまだ見つけていません (PRISM はまだ私にとって非常に複雑です)。さまざまな単純な HelloWorldMVVM アプリはまったく処理しません。
事前に感謝し、私の英語で申し訳ありません -)
c# - ICommandMVVMの実装
したがって、私が行っているこの特定のMVVM実装では、いくつかのコマンドが必要です。ICommandクラスを1つずつ実装するのに本当にうんざりしていたので、解決策を考え出しましたが、それがどれほど優れているかわからないので、ここでのWPFエキスパートの意見をいただければ幸いです。そして、あなたがより良い解決策を提供できれば、さらに良いでしょう。
私が行ったのは、単一のICommandクラスと、オブジェクトをパラメーターとして受け取る2つのデリゲートです。1つのデリゲートはvoid(OnExecuteの場合)、もう1つのデリゲートは(OnCanExecuteの場合)です。したがって、ICommandのコンストラクター(ViewModelクラスによって呼び出されます)で2つのメソッドを送信し、各ICommandメソッドでデリゲートのメソッドを呼び出します。
それは本当にうまくいきますが、これがそれを行うのに悪い方法なのか、それとももっと良い方法があるのかはわかりません。以下は完全なコードです。否定的であっても、どんな入力でも大歓迎ですが、建設的にしてください。
ViewModel:
ICommand:
wpf - CommandManager.InvalidateRequerySuggested()は十分に高速ではありません。私に何ができる?
短縮版
呼び出しCommandManager.InvalidateRequerySuggested()
が有効になるまでに必要な時間よりもはるかに長くかかります(UIコントロールが無効になるまでに1〜2秒の遅延)。
ロングバージョン
バックグラウンドスレッドベースのタスクプロセッサにタスクを送信するシステムがあります。この送信は、WPFUIスレッドで行われます。
この送信が発生すると、バックグラウンドスレッドを管理するオブジェクトは次の2つのことを行います。
これは、いくつかのビューモデルが応答する「ビジー」イベント(まだUIスレッド上にある)を発生させます。このイベントを受信すると、彼ら
IsEnabled
は自分自身にフラグを設定しfalse
ます。このプロパティにデータバインドされているビューのコントロールは、すぐにグレー表示されます。これは、私が期待することです。これは、WPF
ICommand
オブジェクトに実行を許可してはならないことを通知します(これもUIスレッド上にあります)。オブジェクトに似たものはないためINotifyPropertyChanged
、WPFにすべてのコマンドオブジェクトの状態を再検討させるようにICommand
強制的に呼び出す必要があります(はい、実際にこれを行う必要があります。そうしないと、これらのコントロールはいずれも無効になりません)。ただし、項目1とは異なり、オブジェクトを使用しているボタンやメニュー項目などが、プロパティを手動で設定しているUIコントロールよりも、視覚的に無効な状態に変わるまでにかなり長い時間がかかります。CommandManager.InvalidateRequerySuggested()
CanExecute
ICommand
IsEnabled
問題は、UXの観点からすると、これはひどいように見えることです。コントロールの半分はすぐにグレー表示され(IsEnabled
プロパティがfalseに設定されているため)、1〜2秒後に、コントロールの残りの半分がそれに続きます(CanExecute
メソッドが最終的に再評価されるため)。
それで、私の質問のパート1:質問
するの
はばかげているように聞こえますが、私がCommandManager.InvalidateRequerySuggested()
それをより速く仕事にできるようにする方法はありますか?ないのではないかと思います。
十分に公平です、私の質問のパート2:
これを回避するにはどうすればよいですか?すべてのコントロールを同時に無効にすることをお勧めします。それ以外の場合は、専門的ではなく、ぎこちなく見えます。何か案は?:-)
wpf - WPF:バインドされたコマンドを実行できないときにボタン(分割ボタン)を有効にする方法は?
2 つの重なり合うボタンとポップアップで構成されるカスタム分割ボタンを構築しています - このように (画像はいくつかの一般的な分割ボタンを示しています):
SplitButton http://windowsclient.net/wf/blogs/jfoscoding/splitbutton.PNG
私のSplitButtonは、矢印のある右側がクリックされるとポップアップを開き、メインボタンがクリックされるとSplitButton.Commandを実行します。
ただし、私の場合、デフォルトのアクションが実行できない場合があり、その場合、メインボタンがクリックされたときに、代わりにポップアップを開きたいと思います。
私はそれを達成しましたが、問題はこれです:
- SplitButton は ToggleButton からサブクラス化されます
- ControlTemplate には、ToggleButton (一番下) と Button (短く、一番上にオーバーレイ) があります。
Button.Command="{TemplateBinding Command}"
(私ができるように<SplitButton Command="{Binding MyDefaultAction}">...
)- 問題: コマンドが実行できない場合、SplitButton 全体が無効になります。
同じコマンドを使い続けたいのですが、ボタンの動作をオーバーライドして、Command.CanExecute() が false を返したときにボタンが無効にならないようにします。これどうやってするの?
ありがとうございました!
wpf - RoutedCommandが呼び出されたときにXamlyはストーリーボードを開始しますか?
ICommandがXAMLで実行されたときにストーリーボードを開始する方法はありますか?
wpf - データバインドされた WPF ListView のアイテムに MouseBinding を追加する
ユーザーが ListView の項目をクリックしたときに、ViewModel でコマンドを実行しようとしています。ListViewItem
XAML に a を追加すると、その に a を追加するだけで済みMouseBinding
ますInputBindings
。
しかし、データバインドされた ListView でこれを実現するにはどうすればよいでしょうか?
ListViewItem
スタイルを定義ControlTempalte
し、ListViewItem
. ただし、より簡単な解決策があることを願っています。
敬具、マイケル
wpf - ICommand _canExecute の問題
次のコードがありますが、コンパイラが CanExecute メソッドの戻り値の型を判別できないため、コンパイルできません。何が間違っているのか誰かが私を助けることができますか?
c# - WPF のコマンド、実装に関する質問
これについてはすでに質問したことは知っていますが、混乱を招くだけです。私はWPF MVVMパターンに関するチュートリアルを行っていますが、チュートリアルのように、ICommandインターフェイスの実装方法について詳しく説明していないため、正しく理解できないようです。(それが本当にどれほど正しいかわからない?!!)
ICommand の次の実装があります。
そして今、これは次のように使用します:
ViewCommand
クラスのコンストラクターが何をすべきかわかりませんか? クラスでは StartViewModel
、コンストラクターでラムダ式を使用しているため、デリゲートが必要ですが、何をどのように Execute および CanExecute と連携させるのかわかりません。を入れましたAction<object>
が、おそらく間違っています...
最後に、それを説明する ICommand の実装方法に関するチュートリアルを教えてもらえますか?
ありがとう!