由于Visual Studio 2015处于RC状态,我不确定我是否发现了错误,或者我的项目出错了。
我已经创建了一个带有MVVM Light的Viewmodel Locator和暴露的静态属性,它们返回每个viewmodel的实例。定位器在app.xaml中注册为静态资源。
通常我会在Page Xaml中用这样的行绑定它:
DataContext="{Binding Path=MyViewModel, Source={StaticResource ViewModelLocator}}"
然而,虽然我在VS2015中尝试之前从未遇到过这方面的问题,但是我在为Windows 10创建的新项目中无法正常工作。
当我运行项目时,DataContext在页面中为空,即使它已在XAML中明确分配,因为我已经完成了许多其他项目。我检查并创建,初始化了ViewModelLocator静态资源,其MyViewModel属性也包含我想要的ViewModel。所以在VM或Locator中肯定没有空引用,但由于某种原因,将它绑定到页面的DataContext的XAML声明似乎被忽略了......
我在定位器中的MyViewModel的静态属性getter中设置了一个断点,它永远不会被调用...
所以我不确定这是VS2015,MVVM Light,Windows 10 SDK或Windows 10本身(当前版本10162)的问题......
还有其他人遇到过这个问题吗?
答案 0 :(得分:0)
我发现了问题。获取定位器中各个视图模型的属性不应该是静态的,实际上看看我从未有过的其他项目。
这就是我所拥有的:
public static MyViewModelType MyViewmodel { get { return ServiceLocator.Current.GetInstance<MyViewModelType>(); } }
我不确定这次我在想什么(喝酒)让它们变成静态,但是从定位器属性中的get中删除该关键字会立即解决问题。