Silverlight EventHandler DependencyProperty绑定

时间:2012-07-25 16:45:42

标签: silverlight xaml binding event-handling dependency-properties

我有一个UserControl,我试图将事件处理程序从父控件连接到。我希望尽可能少地执行代码并遇到一些问题。这是我的设置:

我在后面的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}}" />

现在在调试器中,我可以实现所有getter和setter,这是调用断点时的经典方法。我在被击中时看到了MyParentControl.PrintClickHandler的getter,但是NewUserControl.PrintClickHandler的setter从未被命中。我在输出中也没有与此绑定相关的错误或警告。

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:-1)

这个问题是错误的。在处理事件时,使用依赖属性是不合适的。我可以在我的代码中简单地添加一个公共Event属性,然后可以在xaml中将其设置为适当的事件处理程序方法。