8

私は mvvm と mvvm light にはかなり慣れていませんが、その一般的な考え方は理解していると思います。私が理解していないのは、新しいウィンドウを開きたいが、そのウィンドウが呼び出し元からのデータを必要とする場合、そのデータを新しいウィンドウに取得するためのベストプラクティスは何ですか? データをコンストラクターに渡す場合、それはビュー モデルに渡すためにコード ビハインドにコードが必要であることを意味します。メッセージは基本データではないので使えません。

4

1 に答える 1

7

一般的な選択肢の 1 つは、ビュー/ビューモデルを作成して新しいビューを表示するサービス クラスを使用することです。ビューモデルコンストラクターおよび/またはメソッド/プロパティは、呼び出し元からデータを受け取ることができ、ビューは画面に表示する前にビューモデルにバインドされます。

以下は、DialogService の非常に単純な実装です。

public class DialogService : IDisposable
{
    #region Member Variables
    private static volatile DialogService instance;
    private static object syncroot = new object();
    #endregion

    #region Ctr
    private DialogService()
    {

    }
    #endregion

    #region Public Methods
    public void ShowDialog(object _callerContentOne, object _callerContentTwo)
    {
        MyDialogViewModel viewmodel = new MyDialogViewModel(_callerContentOne, _callerContentTwo);
        MyDialogView view = new MyDialogView();
        view.DataContext = viewmodel;

        view.ShowDialog();
    }
    #endregion

    #region Private Methods

    #endregion

    #region Properties
    public DialogService Instance
    {
        get
        {
            if (instance == null)
            {
                lock (syncroot)
                {
                    if (instance == null)
                    {
                        instance = new DialogService();
                    }
                }
            }
            return instance;
        }
    }
    #endregion
}
于 2013-01-07T15:08:00.180 に答える