2013-12-13 39 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',則按鈕狀態可能無法正確更新。 –