問題タブ [relaycommand]
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.
.net - Silverlight RIA アプリで MVVM Relay コマンドが起動しない
Silverlight 4 RIA (エンティティ フレームワーク) アプリケーションを開発していますが、MVVMLight RelayCommand の使用に問題があります。以前は問題なく使用していましたが、ViewModelLocator パターンを実装した後に問題があるようです。
ボタン コントロールのバインドでは問題は発生せず、アプリケーションは実行されますが、ボタン クリックで RelayCommand が起動されません。
Blend で RelayCommand をバインドしようとすると、SelectionCommand プロパティは表示されませんが、IsBusy などの他のプロパティは表示されます。
私が間違っていることは何ですか?
c# - RelayCommand RaiseCanExecuteChanged() が失敗する
CanExecute デリゲートで初期化された RelayCommands にバインドされたいくつかのボタンを使用しています。
BoolProp1とBoolProp2はセッターが を正しく発生させる通常のプロパティですが、ご存知のように、これは SLがコマンドでPropertyChanged再評価するのに十分ではありません。そのため、両方のセッターCanExecuteも呼び出します。Delete.RaiseCanExecuteChanged()
これはすべて正常に機能します(ボタンは無効になり、適切に有効になります)、ある時点まではすべて停止します。その時点で、呼び出しによってDelete.RaiseCanExecuteChanged()ブレークポイントが起動されなくなりCanDelete()、ボタンは元の状態のままになります。
正確な原因を特定するために 2 時間費やしましたが、効果はありませんでした。RaiseCanExecuteChanged()単一の「バインディング反復」中に複数の呼び出しが何らかの形でメカニズムを壊していると思われます。
ヒントはありますか?私はすでにIsExecutable更新された追加のフィールドを使用することを検討していINotifyPropertyChangedます...
アップデート
RelayCommand実際にはMVVM Light ToolkitGalaSoft.MvvmLight.Command.RelayCommandからのものです。ILSpy は、ICommand の非常に簡単な実装を示しています。
コンストラクターに渡される値に一度設定されます_canExecute。Func<bool>
私はまだ問題を最小限に再現するために取り組んでいます。
アップデート
私の答えを見てください。
c# - RelayCommand にバインドされている ContextMenu アイテムが常に無効になっているのはなぜですか?
私は現在、MVVM Light Toolkit を Josh Smith の RelayCommand と組み合わせて使用する、最初の大きな WPF MVVM アプリケーションに取り組んでいます。私が遭遇した問題は、このコマンドを ContextMenu のアイテムにバインドしたことです。これは常に無効になっています。
MenuItem のコード スニペットを次に示します。
コマンドバインディングで行ったことは次のとおりです。ここで見つけた CommandReference というクラスを使用しました。
これはコマンドリファレンスそのものです:
これを行った理由は、気づいた ContextMenu でのコマンド バインディングの問題のためです (ContextMenu が論理/ビジュアル ツリーの一部ではないという事実が原因です)。ネット上でこのテーマに関するいくつかのトピックを見つけました。そのうちのいくつかで CommandReference クラスを見つけました。これは私の問題に対する良い解決策のように思えました。これらのコマンドバインディングの問題は実際にはなくなりましたが、MenuItem が無効のままであるため、コマンドの CanExecute が認識されていないようです。
ViewModel (DataContext としてビューにバインドされている) には、次のコマンドのコードがあります。
コードを機能させるために何が欠けていますか? 私が使用している CommandReference と関係があるのではないかと思いましたが、何を探すべきかわかりません。
皆さんが助けてくれることを本当に願っています!
wpf - WPF/MVVMでRelayCommandオブジェクトをクリーンアップする方法または時期は?
RelayCommand の標準的な Josh Smith 実装を使用して、WPF/MVVM アプリケーションに ICommands を実装しています。参照: MVVM デザイン パターンを使用した WPF アプリ
私の CanExecute メソッドのいくつかは、実行に時間がかかります。個々に、それらは悪くありません (それぞれ数分の 1 秒)。しかし、UI にバインドするコマンドが多いほど、アプリケーションの応答が遅くなることに気付きました (10 秒を超える遅延 - うんざり)。
RelayCommand CanExecuteChanged が CommandManager.RequerySuggested イベントにフックされており、ViewModel テンプレートが IDataErrorInfo 検証の一部として CommandManager.InvalidateRequerySuggested() を呼び出しているためだと思います。
私の ViewModels は IDisposable を実装しているので、OnDispose メソッドを利用して RelayCommands をクリーンアップしようとしましたが、VM が破棄された後も ICommand.CanExecute メソッドが呼び出され続けます。
これにより、何か (CommandManager?、View?) が RelayCommand への参照を保持していると結論付けました。
RelayCommands を解放および破棄して、目的の有効期間が切れた後に再クエリされないようにするための適切なパターンを持っている人はいますか?
CanExecute をいつ呼び出す必要があるかを管理するより良い方法はありますか?
wpf - CanExecuteCommandでパフォーマンスに影響はありますか?
ICommandオブジェクトのCanExecuteCommandを使用することのパフォーマンスへの影響は何ですか。メソッドは何度も実行されますか?
コマンドにバインドされたボタンを有効にするかどうかを決定するために、約200個のオブジェクトのコレクションを反復処理する必要がありますか?CanExecuteCommandが繰り返し実行されるため、アプリケーションが遅くなりますか?
wpf - ICommand を実装するだけでなく、RelayCommand または DelegateCommand を使用するのはなぜですか?
私はちょうど WPF で MVVM について学んでいます。私は MVVM と同様に WPF の両方に完全に慣れていません (仕組みは理解していますが、使用したことはありません...)。
Web で見つけたすべてのチュートリアル/記事では、RelayCommand または DelegateCommand のいずれかを使用しています。
私の意見では、これらのパターンは VM が SRP の原則に違反することを余儀なくさせます。なぜなら、VM はコマンド ロジックを内部に保持するからです。
ICommand インターフェイスのカスタム実装を使用しないのはなぜですか? ちょうどこのような:
人物を表示して DB に保存しているとします。
私の Xaml は次のようになります。
これが私の VM です。
そして、これは私のコマンドです:
私のアプローチの問題は何ですか?
c# - WPFは、CommandManager(CommandManager.InvalidateRequerySuggested)を使用して無効化するタイミングをどのように決定しますか?
私はRelayCommandをあちこちで使用してきましたが、不思議に思って知りたいと思いました... CommandManager.InvalidateRequerySuggested()WPFによってgetが呼び出されるのはいつですか?
私の推測では、UI上の他のルーティングされたイベントがトリガーされるたびに、MVVMの世界では、主にOnPropertyChangedイベントが発生し、値が変更され、関連するroutedeventが実行されることを意味します。しかし、それは単なる推測であり、誰かがここで正確な内部の仕組みを知っているかどうか疑問に思っています。
c# - マークアップで宣言されているにもかかわらず、CommandParameter がときどき (常にではない) null になるのはなぜですか?
おおよそ次のようなコードがあります。
DataContext として使用されるビューモデルでは:
MenuItemが最初に表示されたときの出力は次のとおりです。
MenuItem「EnumValue」をクリックすると、さらに3回印刷さNullReferenceExceptionれ、行に表示されますvar enumValue = (SomeEnum)commandParameter(commandParameteris null)。
私の人生ではCommandParameter、最初の数回CanExecuteが正しい理由を考えることができませんが、null別の時間です。ここで何が起こっているのですか?
silverlight - リレー コマンドでテンプレート イベントを制御する
別のコントロール テンプレート内にあり、MVVM ライト リレー コマンドを使用しているコントロール テンプレートでイベントをトリガーする際に問題があります。
これがケースです: main_control は generic.xaml スタイルでテンプレート化されています。sub_control も同様にテンプレート化されています。
main_control には ObservableCollection に複数の sub_control インスタンスがあります
現在、MVVM Light で実装されている私の SL プロジェクトには、xaml に main_control を含むビューがあります。このビューは、sub_control で埋めるビューモデルにバインドされています。
私が達成しようとしているのは、クリックされた sub_control のインスタンスをビューモデルに戻すことです。
ご協力いただきありがとうございます。
wpf - RelayCommand では、オブジェクトの送信者は常に null です
ボタンのクリックを処理するために RelayCommand を使用しています。送信者パラメーターを取得する必要がありますが、常に null です。なぜですか?
ViewModel.cs
View.xaml
ExpandClickCommand で現在の ListboxItem のインデックスを取得する必要があります