我有一个奇怪的问题,我似乎无法找到任何答案。MVVM轻,Metro应用程序,继承ViewModelBase打破设计模式
我正在使用MVVM Light通过NuGet使用Visual Studio 2012构建Metro Store应用程序。
在设计和添加数据上下文xaml代码时,studio给我带来了错误“对象引用未设置为对象实例”的红色swiggly。
DataContext={Binding MainVM, Source={StaticResource Locator}}
我终于把它缩小到我的viewmodel中的继承。我有一个基础视图模型,我所有的ViewModels继承宣布为:所有我的ViewModels这样
public class BaseViewModel : ViewModelBase
{
}
那么很明显:现在
public class MainViewModel : BaseViewModel
{
}
,在运行时的一切工作完全正常(这是混乱我),但设计模式打破了。
但是,如果我删除继承和有我的ViewModels直接继承ViewModelBase,一切都在设计模式罚款:
public class MainViewModel : ViewModelBase
{
}
我想,也许什么东西在代码中导致一个问题,所以我评论除了编译所需要的东西外,所有的东西都完成了,并且仍然收到相同的结果
任何人似乎都有这个问题,或知道我可能做错了吗?我通常在使用MVVM处理Silverlight或WPF应用程序时使用相同的模式,并且在那里看起来很好。
只是一个旁注,我的ViewModelLocator确实有一个返回MainViewModel类的MainVM属性。
UPDATE 阅读LBugnion和威尔的意见后,我正准备调试设计模式时,我注意到我goofily已经忘记了在BaseViewModel注释掉我的代码。我确实发现那里有破坏代码。设计模式不喜欢以下行:
private CoreDispatcher UIDispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
我正在用它来更新代码中的UI线程。我猜测(哪个更有经验的人可能会参与其中)在设计模式中没有UI线程?
通常我使用“IsInDesignMode”属性,以使我的ViewModels几乎非功能性的设计,但显然忘了所以在这里做,所以我改变以上
private CoreDispatcher UIDispatcher = IsInDesignModeStatic ? null : Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
我混日子行
我经常这样做,所以通常这不应该打破设计模式。必须在某个地方抛出异常,你是否尝试调试设计模式代码? – LBugnion
是的,我通常也和其他技术一样,所以我认为这可能是地铁的事情。显然我错了,我搞错了我的调试(正如上面更新中所述),所以现在一切正常。谢谢! –