首先,我是Silverlight中的一个初学者,而我之前从未使用过的MVVM Light中的更多。 我使用的是VS2013,我有一个使用MVVM Light的Silverlight解决方案(我不是这个解决方案的原始开发者)。 所以,我可能有8到10个视图和相同数量的视图模型是"链接"通过" ViewModelLocator"在定位器库中(如果我已经理解MVVM的工作原理)。
我的工作是从此解决方案中删除定位器服务,并直接使用视图后面的代码来建立"链接"使用ViewModel,因为此解决方案中并不真正需要定位器,因此他们决定将其删除。
我的第一个想法是"简单地说"复制(并进行必要的调整)定位器中与该视图后面的代码有关的视图中的代码,并删除在视图xaml中绑定定位器的datacontext。 但它不起作用,我在调试控制台中看到很多消息(但没有错误或警告),如:"错误System.Windows.Data:路径错误BindingExpression:property' User'找不到' Info.ViewModel.ViewModel_Content' .........
我想我应该错过一些东西,但我不知道是什么,也许是对改变的约束或类似的东西......就像我改变的东西不会影响解决方案,现在我看到更少"事情&# 34;我开始时在我的界面上。
您对此有何看法?删除定位器服务的正确步骤是什么?
非常感谢你的帮助和建议,我为我糟糕的英语道歉: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;
}
}
编辑:
问题解决了!马克答案是对的,我终于解决了我的问题。不要忘记删除视图中的数据源,并在视图后面的每个代码中设置datacontext。谢谢!
答案 0 :(得分:1)
在后面的每个视图代码中,添加到构造函数(或加载的方法等):
this.DataContext = Ask;
(很明显,viewmodel类会因每个视图而异)
如果我理解你的帖子,你已经完成了所有这些,但#4。