【问题标题】:Best Practice to open a New Window in MVVM Light with Parameters在带有参数的 MVVM Light 中打开新窗口的最佳实践
【发布时间】:2012-12-21 07:54:27
【问题描述】:

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

【问题讨论】:

  • 很抱歉让这个从古代复活,但是“我不能使用消息传递,因为它不是基本数据”对你来说是什么意思。 ?我问这个是因为我正在学习 MVVM,如果我遇到你的情况,我会使用 Messaging。
  • 对不起,我记起来太久了

标签: c# wpf mvvm mvvm-light


【解决方案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
}

【讨论】:

  • 你能给我看一个基本的例子吗?我不确定我是否完全关注你。
  • geedubb 仅适用于 silverlight。我正在 Visual Studio 2010 上构建一个 wpf 应用程序。
  • 实际上,这不是 geedbubb 发布的仅限 Silverlight 的解决方案。它可能是为 Silverlight 量身定制的,但 Silverlight 和 WPF 非常相似。我们的想法是从该链接中实现的技术中学习,然后根据您自己的个人解决方案对其进行调整。
猜你喜欢
  • 1970-01-01
  • 2015-03-03
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2015-09-01
  • 2019-01-20
相关资源
最近更新 更多