2011-02-04 36 views
1

我做了它繼承自定義綁定類查找綁定控件自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 
    } 

} 

綁定控件應該是一個框架元素。

我需要直接訪問它來設置這些事件:PreviewKeyDown和PreviewLostKeyboardFocus。

但是,如何通過綁定訪問框架元素?這可以做到嗎?

我試過Keyboard.FocusedElement,但使用telerik的radnumericupdown已告訴我,這可能不是綁定綁定到相同的元素。

+0

你的樣品沒有道理給我。你能解釋你想達到的目標嗎?此外,斷點+選擇對象並按下SHIFT + F9是調試信息的重要來源(即檢查Source中的對象或任何綁定的對象)。 :) – 2011-02-04 10:15:26

回答

0

我猜你正在Xaml中設置你的綁定,否則你將只能用它應用到的控件實例構造你的自定義Binding類。

我們有類似的問題,我們最終做的是創建一個繼承自MarkupExtension的自定義BindingExtension。然後,我們使用它來代替Xaml中的常規綁定 - 例如{幫手:綁定}而不是{綁定}。這給你帶來的是MarkupExtension訪問它初始化時綁定到的依賴對象(在ProvideValue中) - 然後你可以設置控件屬性,根據需要設置事件和/或創建自定義Binding類而不是常規一個給它一個控制它的約束的句柄。

我認爲我們得到了一個自定義綁定的MarkupExtension初始樣本代碼,並可以如何重寫ProvideValue以訪問目標控制在這裏:http://www.hardcodet.net/2008/04/wpf-custom-binding-class

+0

我知道我有點遲來回答。我用你的回覆 - 但完全忘了承認這一點..謝謝! – iakob 2016-10-01 05:43:14