【问题标题】:event binding in MVVMMVVM 中的事件绑定
【发布时间】:2011-10-01 16:19:23
【问题描述】:

我在 ViewModel 中的代码:

public void Insert_Click(object sender, RoutedEventArgs e)
{
    System.Windows.MessageBox.Show("Insert_Click");
}

视图中的代码:

<Button Click="{Binding Insert_Click}"  Background="Black" Height="56" Name="btnAdd" Width="57">
</Button>

错误:

错误 1 ​​Click="{Binding Insert_Click}" 无效。 '{捆绑 Insert_Click}' 不是有效的事件处理程序方法名称。仅实例 生成类或代码隐藏类的方法有效

请给我正确的代码

【问题讨论】:

  • 我的回答并没有真正解决 MVVM,只是您的错误消息。 aqwert 的答案是一个更好的长期解决方案,但需要一些关于命令的阅读。 (编辑:我删除了我的答案)。

标签: wpf c#-4.0 binding


【解决方案1】:

如果您从事件处理程序中删除 Binding 语法,则事件挂钩仅适用于控件/窗口后面的代码。对于 MVVM,它有点不同。如果您将处理程序移到后面的代码中,您可以让它工作,但我怀疑您想使用 MVVM。

这里你真正需要的是使用命令模式

<Button Command="{Binding Insert}" Background="Black" Height="56" Name="btnAdd" Width="57"/>

查看模型

public ViewModel()
{
     Insert = new RelayCommand(Insert_Click);
}

public ICommand Insert { get; private set; }


private void Insert_Click()
{
    System.Windows.MessageBox.Show("Insert_Click");
}

这是使用MVVM light等框架

【讨论】:

  • +1。这篇经典文章很好地解释了指挥:msdn.microsoft.com/en-us/magazine/dd419663.aspx。您不需要框架(MVVM Light)来执行此操作,因为文章中的 RelayCommand 本身就可以工作。 (并不是说你不应该使用 MVVM Light!)。
  • 刚才提到了 MVVMLight 作为一个框架,所以 RelayCommand 并没有成为一个谜。你当然可以自己动手,在早期我就是这么做的,但现在框架都发展得很好。感谢您的链接
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2020-08-14
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多