Kev*_*lia 63 c# data-binding wpf xaml command
所以我一直在四处寻找并且无法确切地知道如何做到这一点.我正在使用MVVM创建用户控件,并希望在'Loaded'事件上运行命令.我意识到这需要一些代码,但我无法弄清楚需要什么.该命令位于ViewModel中,它被设置为视图的datacontext,但我不确定如何路由它,所以我可以从加载的事件后面的代码中调用它.基本上我想要的是这样的......
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
//Call command from viewmodel
}
Run Code Online (Sandbox Code Playgroud)
环顾四周,我无法在任何地方找到这种语法.我是否需要先在xaml中绑定命令才能引用它?我注意到用户控件中的命令绑定选项不会让你像按钮那样绑定命令......
<UserControl.CommandBindings>
<CommandBinding Command="{Binding MyCommand}" /> <!-- Throws compile error -->
</UserControl.CommandBindings>
Run Code Online (Sandbox Code Playgroud)
我确信有一个简单的方法可以做到这一点,但我不能为我的生活弄清楚.
H.B*_*.B. 130
好吧,如果已经设置了DataContext,你可以投射它并调用命令:
var viewModel = (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(null))
viewModel.MyCommand.Execute(null);
Run Code Online (Sandbox Code Playgroud)
(根据需要更改参数)
前言:在不了解您的要求的情况下,在加载时从代码隐藏执行命令似乎是一种代码味道.MVVM方面必须有更好的方法.
但是,如果你真的需要在代码中执行它,那么这样的东西可能会起作用(注意:我现在无法测试这个):
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
// Get the viewmodel from the DataContext
MyViewModel vm = this.DataContext as MyViewModel;
//Call command from viewmodel
if ((vm != null) && (vm.MyCommand.CanExecute(null)))
vm.MyCommand.Execute(null);
}
Run Code Online (Sandbox Code Playgroud)
再次 - 尝试找到更好的方法......
归档时间: |
|
查看次数: |
67193 次 |
最近记录: |