2011-10-01 54 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