2013-12-13 97 views
2

我正在开发一些wpf应用程序,使用mvvm。我试图一起使用按钮单击事件和命令,但命令永远不会执行。另外,当我只使用命令而没有点击事件时,它完美无缺。这里是代码:WPF按钮单击和命令不起作用MVVM

<ControlTemplate x:Key="reminderDataTemplate">   
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="25" /> 
      <RowDefinition Height="150" /> 
      <RowDefinition Height="20" /> 
     </Grid.RowDefinitions> 
     <Label Grid.Row="0" Content="New reminder:" HorizontalAlignment="Left" /> 
     <TextBox Text="{Binding Path=ReminderText, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Height="150" Width="200" HorizontalAlignment="Left"/> 
     <Button Name="btnSaveReminder" Grid.Row="2" Content="Save" Width="auto" Height="20" HorizontalAlignment="Left" Click="btnSaveReminder_Click" Command="{Binding Path= btnSaveReminder}" /> 
    </Grid> 
</ControlTemplate> 

这是为什么发生?

只需提及我必须一起使用点击和命令,因为我的视图和viewmodel在不同的项目中。

更新: 也可以这么说,当我在控制模板以外的按钮中一起使用点击和命令时,一切都很完美。

+0

尝试删除代码> Click =“btnSaveReminder_Click”<? –

+0

是的,当我删除它的命令执行得很好。但是我需要两个,点击事件和命令才能执行。 – Stojdza

+1

*我必须一起使用点击和命令,因为我的视图和视图模型在不同的项目中* ...视图和视图模型通常在不同的项目中,但是这并不能解释为什么你需要使用两者......你在做什么在你的'Click'处理程序中? – Sheridan

回答

7

对Click事件执行命令。

private void btnClick(object sender, RoutedEventArgs e) 
     { 
      var btn = sender as Button; 
      btn.Command.Execute(btn.CommandParameter); 
     } 
+0

就是这样。谢谢! – Stojdza

+3

更好的方法是在调用Execute()之前检查'CanExecute()'。请注意,如果您的命令可能永远不可用,则应根据命令状态验证该按钮是否仍处于启用/禁用状态。如果命令没有按照预期的方式执行'Click',则按钮状态可能无法正确更新。 –