【问题标题】:WPF button click and command doesn't work together MVVMWPF按钮单击和命令不能一起工作MVVM
【发布时间】:2014-01-01 04:12:55
【问题描述】:

我正在使用 mvvm 开发一些 wpf 应用程序。我正在尝试同时使用按钮单击事件和命令,但命令永远不会被执行。此外,当我只使用没有点击事件的命令时,它可以完美运行。代码如下:

<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>

为什么会这样?

顺便提一下,由于我的视图和视图模型在不同的项目中,所以我必须同时使用单击和命令。

更新: 还要说的是,当我在控件模板之外的按钮中同时使用单击和命令时,一切正常。

【问题讨论】:

  • 尝试删除代码>Click="btnSaveReminder_Click"
  • 是的,当我删除它时,命令执行得很好。但我需要同时执行点击事件和命令。
  • 我必须同时使用单击和命令,因为我的视图和视图模型在不同的项目中...视图和视图模型通常在不同的项目中,但这并不能解释原因您需要同时使用这两者...您在 Click 处理程序中做什么?
  • 我的应用程序的结构不允许我将我的 wpf 项目的引用添加到我的 MVVM 项目中,所以我无法从 mvvm 访问我的 wpf 组件。我只使用点击事件来改变一些列表框的控制模板,命令用于将一些数据保存到数据库中。
  • @Stojdza 也不应该。 ViewModel 根本不应该知道 View。 是否您的 ViewModel 有一个名为 btnSaveReminder 的 ICommand 派生属性?您使用的是哪个框架?

标签: c# wpf mvvm


【解决方案1】:

Click event上,执行命令。

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

【讨论】:

  • 就是这样。谢谢!
  • 最好在致电Execute() 之前检查CanExecute()。请注意,如果您的命令可能永远不可用,您应该根据命令状态验证按钮是否仍处于启用/禁用状态。如果在组合Click 中命令未按预期执行,则按钮状态也可能无法正确更新。
猜你喜欢
  • 2019-05-20
  • 2013-09-08
  • 2013-08-09
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2017-08-02
  • 2015-06-07
  • 2020-03-06
相关资源
最近更新 更多