Silverlight事件处理程序DependencyProperty绑定



我有一个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从未命中。我在输出中也没有与此绑定相关的错误或警告。

我从未尝试过这样的事件,但看起来您的依赖属性可能是由于设置错误,请尝试:

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));

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

相关内容

  • 没有找到相关文章

最新更新