【问题标题】:Remove locator services from MVVM Light / Silverlight solution从 MVVM Light / Silverlight 解决方案中移除定位器服务
【发布时间】:2015-06-03 13:36:51
【问题描述】:

首先,我是 silverlight 的初学者,并且是我以前从未使用过的 MVVM Light 的初学者。 我正在使用 VS2013,并且我有一个使用 MVVM Light 的 silverlight 解决方案(我不是这个解决方案的原始开发者)。 因此,我可能有 8-10 个视图和相同数量的视图模型,它们通过定位器库中的“ViewModelLocator”“链接”(如果我了解 MVVM 的工作原理)。

我的工作是从该解决方案中删除定位器服务,并直接使用视图后面的代码与 ViewModel 建立“链接”,因为此解决方案中并不真正需要定位器,因此他们决定将其删除。

我的第一个想法是在此视图后面的代码中“简单”复制​​(并进行必要的调整)定位器中与我的视图相关的代码,并删除在视图 xaml 中绑定定位器的数据上下文。 但它不起作用,我在调试控制台中看到很多消息(但没有错误或警告),例如:“错误 System.Windows.Data:路径 BindingExpression 出错:在 'Info.ViewModel 上找不到属性'用户'。 ViewModel_Content'............

我想我应该错过一些东西,但我不知道是什么,可能是要更改的绑定或类似的东西……就像我所做的更改没有影响解决方案一样,现在我在界面上看到的“东西”要少得多当我启动它时。

请问您对此有何看法?删除定位器服务的正确步骤是什么?

非常感谢您的帮助和建议,我为我的英语不好表示歉意:p

编辑:

我也忘了说我已经编辑了 app.xaml 并删除了对 ViewModelLocator 的引用:

<vm:ViewModelLocator x:Key="Locator"/>

您可以在此处查看 ViewModelLocator.cs 中的块代码示例(这样有 7 或 8 个,每个视图/viewModel 一个):

    private static ViewModel_Ask _Ask;

    public ViewModel_Ask Ask
    {
        get
        {
            return AskStatic;
        }
    }

    public static void CreateAsk()
    {
        if (_Ask == null)
        {
            _Ask = new ViewModel_Ask();
        }
    }

    public static void ClearAsk()
    {
        _Ask.Cleanup();
        _Ask = null;
    }

    public static ViewModel_Ask AskStatic
    {
        get
        {
            if (_Ask == null)
            {
                CreateAsk();
            }

            return _Ask;
        }
    }

编辑:

问题解决了!马克的回答是正确的,我终于解决了我的问题。不要忘记删除视图中的数据源并在视图后面的每个代码中设置数据上下文。谢谢!

【问题讨论】:

  • 添加一些你目前拥有的源代码
  • 感谢您查看我的问题,我已经编辑了一些代码

标签: c# .net silverlight mvvm


【解决方案1】:
  1. 从 app.xaml 中删除定位器引用。
  2. 在每个视图中,移除数据上下文绑定。
  3. 可以将您提供的单例模式放入所需视图模型的每个代码中。
  4. 在每个视图代码后面,添加到构造函数(或加载的方法等):

    this.DataContext = 询问;

(显然,每个视图的viewmodel类会有所不同)

如果我理解你的帖子,除了#4,你已经完成了所有这些。

【讨论】:

  • 感谢您的回答!我已经列出了你所有的列表,但我的解决方案仍然存在问题,我可以构建和运行,但我的界面上没有我应该拥有的所有东西,我想我忘记了一些东西,但我不明白为什么......如果你记得我应该编辑的其他内容,请告诉我:) 再次感谢您!
  • 我过了一会儿回来说终于可以删除定位器了。我终于找到了我的问题并解决了它(我忘记从视图中设置数据上下文)。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多