Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用参数在MVVM Light中打开新窗口的最佳实践_C#_Wpf_Mvvm_Mvvm Light - Fatal编程技术网

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

C# 使用参数在MVVM Light中打开新窗口的最佳实践,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,我对mvvm和mvvm light相当陌生,但我想我理解它的基本概念。我不明白的是,如果我想打开一个新窗口,但该窗口需要来自调用方的数据,那么将该数据发送到新窗口的最佳实践是什么?如果我将数据传递给构造函数,那么这意味着我需要代码隐藏中的代码将其传递给视图模型。我不能使用消息传递,因为它不是基本数据。一个流行的选择是使用服务类来创建视图/视图模型并显示新视图。视图模型构造函数和/或方法/属性可以从调用者接收数据,然后在屏幕上显示之前,视图将绑定到视图模型 下面是DialogService的一个非

我对mvvm和mvvm light相当陌生,但我想我理解它的基本概念。我不明白的是,如果我想打开一个新窗口,但该窗口需要来自调用方的数据,那么将该数据发送到新窗口的最佳实践是什么?如果我将数据传递给构造函数,那么这意味着我需要代码隐藏中的代码将其传递给视图模型。我不能使用消息传递,因为它不是基本数据。

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

下面是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
}

你能给我举个基本的例子吗?我不确定我是否完全明白你的意思。这只适用于silverlight。我正在VisualStudio2010上构建一个wpf应用程序。实际上,这并不是geedbubb发布的Silverlight唯一的解决方案。它可能是为Silverlight定制的,但是Silverlight和WPF非常相似。我们的想法是从该链接中实现的技术中学习,然后为您自己的个人解决方案量身定制。很抱歉从远古时代复活了这一点,但是“我不能使用消息传递,因为它不是基本数据”是什么意思呢?我问这个问题是因为我正在学习MVVM,如果我是在你的情况下,我会使用消息传递。很抱歉,时间太长了,我记不起来了