2011-10-01 28 views
1

我的代码视图模型绑定:事件MVVM

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单击= “{结合Insert_Click}” 不有效。 '{Binding Insert_Click}'不是有效的事件处理程序方法名称。唯一的实例 方法上产生或代码隐藏类是有效的

请告诉我正确的代码

+0

我的回答并没有真正解决MVVM ,只是你的错误信息。 aqwert的答案是一个更好的长期解决方案,但需要一点点阅读指挥。 (编辑:我删除了我的答案)。 –

回答

4

事件挂钩UPS只会背后代码工作的控制/窗口,如果您删除Binding来自事件处理程序的语法。对于MVVM,它有点不同。如果您将处理程序移到代码后面,您可以使其工作,但我怀疑您想使用MVVM。

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

<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

+1。这篇经典的文章很好地解释了这个问题:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx。您不需要框架(MVVM Light)来执行此操作,因为文章中的RelayCommand可以工作。 (不要说你*不应该使用MVVM Light!)。 –

+0

谢谢aqwert和菲尔·桑德勒。 – mrJack

+0

刚刚提到MVVMLight作为一个框架,所以RelayCommand并没有成为一个谜。你当然可以推出自己的产品,但是在我做这件事的早期阶段,现在的框架都已经相当成熟。感谢您的链接 – aqwert