簡體   English   中英

為動態創建的Binding對象創建屬性路徑的正確方法?

[英]Proper way of creating a property path for a dynamically created Binding object?

我已經在靜態類型( DataField )上創建了附加的依賴項屬性。 其中有一個Owner屬性和Name屬性。 這些可以附加到任何DependencyObject實例。

在某些控件(例如TextBox我希望這些附加屬性具有其他行為,因此我從另一種靜態類型覆蓋了元數據:

static void OverrideDataFieldMetaData()
{
    //...
    DataField.NameProperty.OverrideMetadata(typeof(TextBox), new UIPropertyMetadata(new PropertyChangedCallback(OnFieldNameChanged)));
    //...
}

OnFieldNameChanged方法中,我要動態創建一個Binding對象,並將其設置在控件的Text屬性上:

//...

private static void OnFieldNameChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
    OnFieldNameChanged((TextBox)o, (string)e.OldValue, (string)e.NewValue);
}

private static void OnFieldNameChanged(TextBox tb, string oldValue, string newValue)
{
    if (string.IsNullOrWhiteSpace(newValue))
        BindingOperations.ClearBinding(tb, TextBox.TextProperty);
    else
    {
        // PROBLEM HERE!
        var binding = new Binding("(fc:DataField.Owner)." + newValue);

        binding.Source = tb;

        tb.SetBinding(TextBox.TextProperty, binding);
    }
}

這就是我卡住的地方。 我應該如何使用正確的路徑方案創建此Binding對象?

現在,上面的代碼將引發TypeNameParserException 我想我知道為什么會這樣做,但是即使沒有,如果由於某種原因我在包含的Window / UserControl為命名空間定義了不同的前綴怎么辦?

您可以嘗試以下方法:

Binding b = new Binding();
b.Path = new PropertyPath("(0)", DataField.OwnerProperty); 

在后面的代碼中,您不需要名稱空間定義,因為您可以直接引用屬性。

來源: https : //srndolha.wordpress.com/2008/01/11/wpf-binding-to-a-custom-attached-property-in-code/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM