使用参数在MVVM Light中打开新窗口的最佳实践

时间:2013-01-07 15:00:41

标签: c# wpf mvvm mvvm-light

我对mvvm和mvvm light相当新,但我想我理解它的一般概念。我不明白的是,如果我想打开一个新窗口,但该窗口需要来自调用者的数据将这些数据导入新窗口的最佳做法是什么?如果我将数据传递给构造函数,那么这意味着我需要在后面的代码中将代码传递给视图模型。我不能使用消息传递,因为它不是基本数据。

1 个答案:

答案 0 :(得分:6)

一种流行的选择是使用将创建视图/视图模型并显示新视图的服务类。您的视图模型构造函数和/或方法/属性可以从调用者接收数据,然后在将视图显示在屏幕上之前视图将绑定到视图模型。

这是一个非常简单的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
}