1

我有一個用戶控件,我試圖將事件處理程序從父控件連接到。我想盡可能少用代碼,並且遇到一些問題。這裏是我的設置: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從未被擊中。我在輸出中也沒有與此綁定有關的錯誤或警告。

回答

-1

這個問題是錯誤的。在處理事件時,使用依賴屬性是不合適的。我可以簡單地在我的代碼中添加一個公共的Event屬性,後者可以在xaml中設置爲適當的事件處理程序方法。

1

我從來沒有嘗試做這樣的事件,但它看起來像你的依賴屬性可以通過設置不正確,請嘗試:

public RoutedEventHandler PrintClickHandler 
{ 
    get { return (RoutedEventHandler)GetValue(PrintClickHandlerProperty); } 
    set { SetValue(PrintClickHandlerProperty, value); } 
} 

public static DependencyProperty PrintClickHandlerProperty = DependencyProperty.Register(
    "PrintClickHandler", 
    typeof(RoutedEventHandler), 
    typeof(NewUserControl), 
    new PropertyMetadata(null)); 
+0

二傳手永遠不會被調用。 – PhilBrown 2012-07-25 17:28:59

+0

只有通過代碼設置時,通過xaml設置屬性的setter纔會被調用。我還注意到DependencyProperty不是靜態的。我修改了我的答案,包括你的DP應該如何看待。爲了將來使用,您可以在Visual Studio中使用'propdp'快捷方式創建適當的DP。只需輸入propdp並點擊標籤。 – 2012-07-25 17:48:18

+0

這是正確的答案 – 2013-03-19 10:19:28

相關問題