2

私はMVVM Foundationを使用していますが、それは非常に単純で、フレームワーク固有のものではないと思います。私のセットアップは次のとおりです。

  • StartViewModel - RelayCommand/ICommand を返す ExitCommand があります

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • StartView (ユーザー コントロール) には、ExitCommand にバインドされたボタンがあります。

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
4

2 に答える 2

3

まず、 MSDNの WPF Apps With The Model-View-ViewModel Design Patternなど、MVVM についてできるだけ多くのことを読んでください。それを推進する基本原則を理解すれば、答えはより合理的に見えるでしょう。

基本的に、ビュー (UI) とビューモデル (基本的に抽象 UI ですが、抽象モデルも) レイヤーを分離して分離したままにする必要があります。メッセージ ボックスを表示したりウィンドウを閉じたりすることは、UI 固有の詳細と見なす必要があるため、ビューに実装するか、メッセージ ボックスの場合は「サービス」を介してより一般的に利用できます。

ViewModel に関しては、これは制御の反転(IoC) を使用して実現されます。上記のメッセージ ボックスの例を見てみましょう。メッセージ ボックス自体を表示するのではなく、Show メソッドを持つ IMessageBoxService に依存し、代わりに ViewModel が呼び出して責任を委任します。これは、依存性注入(DI) コンテナーを活用することでさらに進めることができます。

ビュー ウィンドウを閉じるために使用される別のアプローチは、ビューがサブスクライブする RequestClose (MSDN 記事のように) などと呼ばれるイベントをビューモデルが公開することです。次に、ViewModel は、対応するビュー / ウィンドウを閉じたいときにイベントを発生させます。他の何かが聞いていると仮定し、責任を負い、実際にそれを行います。

于 2010-09-25T13:10:00.850 に答える
1

StartViewModel に CloseEvent を実装できます。StartView で、この CloseEvent を登録する必要があります。VM から closeevent を発生させると、ビューはアプリ/ウィンドウを閉じる必要があることを認識します。

于 2010-09-25T12:54:46.717 に答える