Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MVVM中的事件绑定_Wpf_C# 4.0_Binding - Fatal编程技术网

Wpf MVVM中的事件绑定

Wpf MVVM中的事件绑定,wpf,c#-4.0,binding,Wpf,C# 4.0,Binding,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"> </B

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\u Click}”无效{绑定 Insert_Click}不是有效的事件处理程序方法名称。唯一实例 生成的或代码隐藏类上的方法有效


请向我显示正确的代码

如果从事件处理程序中删除
绑定
语法,则事件连接仅适用于控件/窗口的代码隐藏。对于MVVM来说,这有点不同。如果将处理程序移到代码后面,就可以实现这一点,但我怀疑您希望使用MVVM

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

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

这是在使用一个框架,例如

我的答案并不是真正针对MVVM,而是您的错误消息。阿克沃特的答案是一个更好的长期解决方案,但需要一点关于指挥的阅读。(编辑:我删除了我的答案)。+1。这篇经典文章很好地解释了指挥。您不需要框架(MVVM Light)来实现这一点,因为本文中的RelayCommand本身就可以工作。(并不是说你不应该使用MVVMLight!)只是提到MVVMLight是一个框架,所以RelayCommand并没有成为一个谜。当然,您可以自己开发,在早期我就是这么做的,但是现在框架都开发得很好。谢谢你的链接
public ViewModel()
{
     Insert = new RelayCommand(Insert_Click);
}

public ICommand Insert { get; private set; }


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