我有一個用戶控件,我試圖將事件處理程序從父控件連接到。我想盡可能少用代碼,並且遇到一些問題。這裏是我的設置:Silverlight EventHandler DependencyProperty綁定
在NewUserControl代碼後面我:
public RoutedEventHandler PrintClickHandler { get; set; }
public DependencyProperty PrintClickHandlerProperty =
DependencyProperty.Register("PrintClickHandler", typeof(RoutedEventHandler),
typeof(NewUserControl), new PropertyMetadata(null));
在MyParentControl我:
public RoutedEventHandler PrintClickHandler
{
get { return btnPrintCall_Click; }
}
private void btnPrintCall_Click(object sender, RoutedEventArgs e)
{
// some code
}
在MyParentControls的XAML NewUserControl.PrintClickHandler我已經綁定
最後:
<NewUserControl PrintClickHandler="{Binding Path=PrintClickHandler,
RelativeSource={RelativeSource AncestorType=local:MyParentControl, AncestorLevel=1}}" />
現在在調試器中,我可以實現所有的getters並設置了在被調用時擊中斷點的經典方式。我在被擊中時看到MyParentControl.PrintClickHandler的getter,但NewUserControl.PrintClickHandler的setter從未被擊中。我在輸出中也沒有與此綁定有關的錯誤或警告。
二傳手永遠不會被調用。 – PhilBrown 2012-07-25 17:28:59
只有通過代碼設置時,通過xaml設置屬性的setter纔會被調用。我還注意到DependencyProperty不是靜態的。我修改了我的答案,包括你的DP應該如何看待。爲了將來使用,您可以在Visual Studio中使用'propdp'快捷方式創建適當的DP。只需輸入propdp並點擊標籤。 – 2012-07-25 17:48:18
這是正確的答案 – 2013-03-19 10:19:28