2013-02-11 15 views
7

PRISMフレームワーク(Unity Container)に基づいてWPF 4.0 - MVVMアプリケーションを開発しています。MVVMでダイアログアーキテクチャを実装する方法

私は、mvvmパターンでダイアログを実装する最良の方法が何であるか疑問に思っていました。 私はアプリケーションでかなりの部分を使用する予定であるため、何かを再利用したいと思っています。

答えて

2

...で身震いします何かをイベントハンドラを取得することを意味しません。

  1. プロジェクトにDialogService(IDialogService)モジュールを追加します。
  2. ダイアログを含むモジュールは、それらをIDialogServiceで登録します。 DialogServiceModuleをModuleDependencyとして宣言することを忘れないでください。
  3. ViewModelsは、IDialogServiceを使用して必要なダイアログを表示するようになりました。

    public interface IDialogService 
    { 
        void RegisterDialog (string dialogID, Type type); 
        bool? ShowDialog  (string dialogID); 
    } 
    
    public class DialogService : IDialogService 
    { 
        private IUnityContainer  m_unityContainer; 
        private DialogServiceRegistry m_dialogServiceRegistry; 
    
        public DialogService(IUnityContainer unityContainer) 
        { 
         m_unityContainer = unityContainer; 
         m_dialogServiceRegistry = new DialogServiceRegistry(); 
        } 
    
        public void RegisterDialog(string dialogID, Type type) 
        { 
         m_dialogServiceRegistry.RegisterDialog(dialogID, type); 
        } 
    
        public bool? ShowDialog(string dialogID) 
        { 
         Type type = m_dialogServiceRegistry[dialogID]; 
         Window window = m_unityContainer.Resolve(type) as Window; 
         bool? dialogResult = window.ShowDialog(); 
    
         return dialogResult; 
        } 
    } 
    

あなたがビュー内のViewModelイベント&ハンドラを使用している場合は、潜在的なリソースリークを排除するためにWeakEventHandlerパターンを使用します。 また、複数のビューを同じViewModelにアタッチすることもできます。 私は、1つのViewModel - > 1つのViewを持つプロジェクトで作業しました。しかし、1つのViewModel - >複数のビューもあります。 デザインの意思決定を行う際には何かを考慮する必要があります。

2

あなたが役に立つかもしれませんMVVMでダイアログについてこの記事:http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern

+0

参考にしていただきありがとうございます。私は振る舞いや他のWPF 4の機能を使用してより洗練された実装があります。 –

+0

@Omribitan - あなたはそう思います。これは、MVVMとWPFの問題の1つです。かなり単純なものでなければならないと考えるために、多くのサードパーティ製のライブラリやコードが必要です。 – Sean

1

私はそれがユーザー情報を取得する必要がある場合のViewModelがイベントを上げてみましょう。次に、それをどのように供給するかは、ビューまでです。このは、分離コードファイルには、しかし、あなたがプリズム/ UnityはあなたのビューモデルのMediatorパターンを実装して使用しているので、実際のMVVMの達人が