【发布时间】: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