MVVM Light - 如何从代码隐藏中触发命令
我需要从 WP7 应用程序栏触发命令。不幸的是这是不可能的,但 Laurent 发布了有趣的解决方法:
private void ApplicationBarMenuItemClick(object sender, System.EventArgs e)
{
var vm = DataContext as MainViewModel;
if (vm != null)
vm.MyCommand.Execute(null);
}
不幸的是我的代码后面没有看到 MainViewModel
类或实际上没有任何 ViewModel
类!数据绑定工作良好,因此 ViewModel 工作正常。我做错了什么?
I need to fire command from WP7 applicationbar. Unfortunately it is not possible, but Laurent published interesting workaround:
private void ApplicationBarMenuItemClick(object sender, System.EventArgs e)
{
var vm = DataContext as MainViewModel;
if (vm != null)
vm.MyCommand.Execute(null);
}
Unfortunately my code behind does not see MainViewModel
class or actually any ViewModel
class at all! Data binding works well so ViewModel
is working fine. What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在该行代码上放置一个断点,并检查命中断点时 DataContext 的值。如果它为空,您可能忘记在视图中设置数据上下文。
如果 DataContext 不为 null,请确保它的类型为 MainViewModel,否则调用 vm.MyCommand.Execute(null) 的行将永远不会被调用。
根据您粘贴的代码,您的视图应如下所示。
这假设您的 ViewModelLocator 具有 MainViewModel 类型的属性 Main。
Put a breakpoint on that line of code and check what the value of DataContext is when the breakpoint is hit. If it's null you've probably forgotten to set the data context in your view.
If the DataContext isn't null, make sure it's of type MainViewModel or else the line calling vm.MyCommand.Execute(null) won't ever be called.
Based on the code you pasted, your view should look something like this.
This assumes your ViewModelLocator has the property Main of type MainViewModel.