1

私のアプリケーションには、MEFedMVVMを介してViewModelをインポートするメインウィンドウがあります。

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の助けを借りて、Executeメソッドを使用したSimplecommandを実現します。

質問

executeメソッドからウィンドウを閉じるにはどうすればよいですか?依存性注入では、コンストラクターを持っていません。イベントを登録したり、ビューをパラメーターとしてビューモデルに指定したりすることはできません。

編集

しかし、私が思う可能性は良くありません:

メソッドでこれを呼び出します

Application.Current.MainWindow.Close()
4

1 に答える 1

1

これは、インスタンスをパラメーターとしてICommand渡すanを記述することで実現できます。Window

良い例がここにあります:プロジェクト内のすべてのWPFウィンドウに「エスケープ時に閉じる-キーを押す」動作を割り当てるにはどうすればよいですか?

その投稿では、ICommandは最終的にKeyBinding(Escapeキーを使用してウィンドウを閉じることができるように)にバインドされますが、コマンドを任意のボタンにバインドしたり、ビュー内のどこからでも呼び出すことができます。重要な部分はRelativeSource、コマンドパラメータバインディングでを使用してWindow、閉じたいものを参照することです。

コメントに応じて編集する

コマンドはシングルトンですが、必須ではありません。ステートレスであり、バインドが容易なため、シングルトンのみです。スルーバインディングへの参照を取得するWindowため、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

于 2011-10-19T12:18:42.973 に答える