質問

私のアプリケーションには、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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top