从绑定中查找绑定控件

时间:2011-02-04 06:56:19

标签: c# binding

我创建了一个继承自Binding的自定义绑定类:

public class MyBinding : Binding
{
  public JsBinding(): base()
  {
    InitiateBinding();
  }

  public JsBinding(string path) : base(path)
  {
    InitiateBinding();
  }

  private void InitiateBinding()
  {
    this.ValidatesOnDataErrors = true;
    this.ValidatesOnExceptions = true;
    this.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    UpdateSourceExceptionFilter = UpdateSourceExceptionFilterCallback;
  }

  private object UpdateSourceExceptionFilterCallback(object bindExpression, Exception exception)
  {
    // Set focus back to bound framework element
    // Setup PreviewKeyDown and PreviewLostKeyboardFocus on bound framework element to prevent further user input until data has become valid
  }

}

绑定控件应该是一个Framework元素。

我需要直接访问它来设置这些事件:PreviewKeyDown和PreviewLostKeyboardFocus。

但是如何通过绑定访问框架元素?可以这样做吗?

我已经尝试过Keyboard.FocusedElement但是使用telerik的radnumericupdown告诉我这可能与绑定绑定的元素不同。

1 个答案:

答案 0 :(得分:0)

我猜你是在Xaml中设置你的绑定,否则你只能用它正在应用的控件实例来构造你的自定义Binding类。

我们遇到了类似的问题,我们最终做的是创建一个继承自MarkupExtension的自定义BindingExtension。然后我们用它来代替Xaml中的常规绑定 - 例如{helpers:Binding}而不是{Binding}。这给你带来的是MarkupExtension可以访问初始化时绑定的依赖项对象(在ProvideValue中) - 然后你可以设置控件属性,根据需要挂钩事件和/或创建自定义Binding类而不是常规一个并给它一个控制它的控件的句柄。

我相信我们获得了自定义Binding MarkupExtension的初始示例代码,以及如何覆盖ProvideValue以访问目标控件:http://www.hardcodet.net/2008/04/wpf-custom-binding-class