我有這樣一個WPF按鈕:參數添加到按鈕單擊事件
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
而且我想通過{Binding Code}
作爲參數到Button處理程序通過。
我該如何解決這個問題?
免責聲明:真正的新WPF
我有這樣一個WPF按鈕:參數添加到按鈕單擊事件
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
而且我想通過{Binding Code}
作爲參數到Button處理程序通過。
我該如何解決這個問題?
免責聲明:真正的新WPF
簡單的解決方案:
<Button Tag="{Binding Code}" ...>
在你的處理器,施放sender
對象Button
並訪問Tag
屬性:
var myValue = ((Button)sender).Tag;
更優雅的解決方案是使用Command pattern of WPF:爲您希望按鈕執行的功能創建命令,將命令綁定到按鈕的Command
屬性並將CommandParameter
綁定到您的值。
那麼有這樣做的方法有兩種:
演員在DataContext
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var code = ((Coupon)button.DataContext).Code;
}
,或是使用標記屬性,它是一個通用的國家財產
<Button Click="button1_Click" Height="23" Margin="0,0,5,0" Name="button1" Tag="{Binding Code}" />
然後
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var code = button.Tag;
}
我會使用'(Button)sender'而不是'sender作爲Button'。在不太可能的情況下,'sender'不是一個按鈕,'(Button)sender'會拋出一個InvalidCastException,從而幫助您找到錯誤。另一方面,你的代碼在這種情況下會默默設置'button'爲null,以後會引發NullReferenceException異常。 – Heinzi 2011-01-06 21:36:50
我並不過分喜歡'Tag',所以也許
<Button Click="button1_Click" myParam="parameter1" Height="23" Margin="0,0,5,0" Name="button1" Width="75">Initiate</Button>
然後通過屬性進行訪問。
void button1_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var theValue = button.Attributes["myParam"].ToString()
}
該標籤將爲現在和更復雜的情況,我會看看命令模式。謝謝 – 2010-01-05 14:29:55
+1關於'CommandParameter'的提示 – 2012-10-04 22:06:52
@ Heinzi謝謝 – Andrei 2014-07-31 11:27:41