MVVM Light中打开带参数的新窗口的最佳实践

8

我对mvvm和mvvm light还比较陌生,但我认为我理解了它的一般思想。 我不明白的是,如果我想打开一个新窗口,但是该窗口需要来自调用者的数据,那么最好的做法是什么? 如果我将数据传递给构造函数,那么这意味着我需要在代码后台中编写代码将其传递给视图模型。 我不能使用消息传递,因为它不是基本数据。


抱歉从古老的过去中挖掘这个问题,但是你所说的“我不能使用消息传递,因为它不是基本数据”是什么意思?我问这个问题是因为我正在学习MVVM,如果我处于你的情况下,我会使用消息传递。 - lightxx
很抱歉,时间太久了,我已经记不起来了。 - Ian Overton
1个回答

7
一种流行的选择是使用服务类来创建视图/视图模型并显示新视图。您的视图模型构造函数和/或方法/属性可以从调用方接收数据,然后在将其显示在屏幕上之前,将视图绑定到视图模型。
以下是一个非常简单的 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
}

请给我展示一个基本的例子好吗?我不确定我完全理解你的意思。 - Ian Overton
geedubb 只适用于 Silverlight。我正在使用 Visual Studio 2010 构建 WPF 应用程序。 - Ian Overton
实际上,geedbubb发布的不是仅限于Silverlight的解决方案。虽然它可能是为Silverlight量身定制的,但Silverlight和WPF非常相似。这个想法是从那个链接中实现的技术中学习,然后将其调整为您自己的个人解决方案。 - Backlash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接