mefedmvvmでウィンドウを閉じる最良の方法
質問
私のアプリケーションには、mefedmvvm the ViewModelを介してインポートするMainWindowがあります。
xmlns:mefed="clr-namespace:MEFedMVVM.ViewModelLocator;assembly=MEFedMVVM.WPF"
mefed:ViewModelLocator.ViewModel="MainViewModel"
そして今、私はviewmodelを実現する私のviewmodelも持っています:
[ExportViewModel("MainViewModel")]
public class MainViewModel: ViewModelBase
私のviewmodelには、ウィンドウを閉じるためのicommandプロパティがあります。閉鎖のためのイベントはどこからでも来ます。そして、Cinch Framework 2.0の助けを借りて、Methodeを実行したSimpleCommandを実現します。
質問
Methodeの実行からウィンドウを閉じるにはどうすればよいですか?依存関係の注入については、コンストラクターではありません。イベントを登録したり、ビューモデルにパラメーターとしてビューを与えることはできません。
編集
しかし、私が思う可能性は良くない:
これをMethodeで呼びます
Application.Current.MainWindow.Close()
解決
これを書くことでこれを達成できます ICommand
それが通過します Window
パラメーターとしてインスタンス。
ここで良い例をご覧ください: プロジェクト内のすべてのWPFウィンドウに「Escape-Key Press」動作を割り当てるにはどうすればよいですか?
その投稿で ICommand
最終的にはaに結合します KeyBinding
(エスケープキーを使用してウィンドウを閉じることができるようにします)が、コマンドを任意のボタンにバインドしたり、ビュー内のどこからでも呼び出したりすることができます。重要な部分は、aを使用することです RelativeSource
コマンドパラメーターでバインディングして参照します Window
あなたが閉じたいこと
コメントに応じて編集します
コマンドはシングルトンですが、それが必要である必要はありません - それはステートレスであり、結合が容易になるため、シングルトンだけです。への参照を取得します Window
バインディングを通じて、aの UserControl
あなたはただ使用することができます:
<Button Command="{x:Static mynamespace:CloseWindowCommand.Instance}"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" Content="Close My Parent Window" />
ビューモデルコードからそれを呼び出すことができるようにすることは、少し複雑であり、別のアプローチが必要です。良い例はここにあります: http://gallery.expression.microsoft.com/windowclosebehavior