7

私はWPF4.0を開発しています-PRISMフレームワーク(Unity Container)に基づくMVVMアプリケーション。

mvvmパターンでダイアログを実装するための最良の方法は何だろうと思っていました。アプリケーションでかなりの数を使用することを計画しているので、再利用可能なものが必要です。

4

3 に答える 3

2

役立つと思われるMVVMとのダイアログに関するこの記事:http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern

于 2013-02-11T12:42:19.140 に答える
2

Prism / Unityを使用しているので、ビューモデルのメディエーターパターンを実装します。

  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->複数のビューもあります。設計を決定する際に考慮すべきことです。

于 2013-02-12T11:35:20.133 に答える
1

ユーザー情報を取得する必要があるときに、ViewModelにイベントを発生させます。それからそれをどのように供給するかはビュー次第です。これ、ファイルの背後にあるコードがイベントハンドラーを取得することを意味しますが、実際のMVVMの熟練者は身震いします...

于 2013-02-11T13:31:19.190 に答える