これまでのところ、アプリがあらゆる場所の一般的なクリックイベントハンドラーから完全なGUIデカップリングに移行する方法に本当に満足しています。今、私はよく理解できない何かに遭遇しています。それは、GUIをポップアップさせたいウィンドウに関連しており、モデルからの情報を表示する必要があります。
私の質問の短いバージョンは、MVVMでモデルがViewModelへの参照を持つことを許可することは絶対に禁止されているのでしょうか?これが私のシナリオです:RGB値を非常に速く循環するLEDのバンクがあります。GUIのウィンドウに、ViewModelを使用したデータバインディングを介して更新された色を表示したいと思います。テストアプリケーションでモックアップViewModelを使用してWindow+UserControlを正常に動作させていますが、このWindowを実際のアプリケーションに配置する必要があります。
私が実行している特定のモードは、ハードウェアの動作をシミュレートします。モデルに色を循環するように命令すると、必要なクラスメンバー変数の値を変更するスレッドが開始されます。
私の現在のMVVMの実装は、基本的に常にポーリングしています。他のLEDを他の場所で更新するために、ViewModelの関数を呼び出すスレッドを実行しています。これによりプロパティが更新されるため、データバインディングを使用しているため、GUIが自動的に更新されます。私のLEDの例の問題は、カラーシーケンスのシミュレーションがスレッドで行われることです。そのため、ViewModelで値をポーリングする必要がある場合、LED変数が過度にロックされるため、処理が遅くなる可能性があります。
したがって、誰かがこの問題に対する別のアプローチを推奨できることを望んでいます。これまでのところ、私が本当に考えることができるのは、WindowデータコンテキストをLEDViewModelにしてから、LEDViewModelをモデルに渡すことだけです。次に、RGBサイクリング関数を呼び出すと、必要に応じて必要なViewModelプロパティを変更できるため、ロックを使用する必要はまったくありません。
これは意味がありますか?何かアドバイスをいただければ幸いです。