アプリケーションがあり、アセンブリがあります。
アプリケーションにはウィンドウがあり、アセンブリにはユーザー コントロールがあります。
ウィンドウにユーザー コントロールのインスタンスがあります。
ユーザー コントロールとウィンドウの両方が、個別のビューモデルによって支えられています。
ユーザーコントロールにはボタンがあります。ボタンは、ユーザー コントロールのビューモデルの状態に基づいて有効/無効にする必要があります。ボタンがクリックされると、ユーザー コントロールのビューモデルの情報に基づいて処理を実行する必要がありますが、ウィンドウのビューモデルで実行する必要があります。(ユーザー コントロールの範囲外で、実行する必要があることの側面があります。)
ここにねじれがあります。このユーザー コントロールは、このウィンドウだけで使用されるのではなく、別のウィンドウで使用されるか、3 番目のウィンドウで使用されるコントロールで使用される可能性があります。ユーザーコントロールは、それが含まれているウィンドウまたはコントロールの種類、またはボタンがクリックされたときにプロセスを処理していることを知ることはできません。
じゃあ何をすればいいの?
アセンブリでコマンドを定義し、ユーザー コントロールのボタンをそれにバインドして、ユーザー コントロールのビューモデルをコマンド パラメーターとして渡しますか? では、コマンドをウィンドウのビューモデルにバインドするにはどうすればよいでしょうか?
または、ユーザー コントロールのビューモデルでコマンドを定義し、イベントを発生させて、適切なアクションを実行する必要があることを親ウィンドウに通知する必要がありますか?
どちらがきれいかは私にはわかりません。