2010-10-07 85 views
7

綁定到依賴項屬性在代碼隱藏中很容易。您只需創建一個新的System.Windows.Data.Binding對象,然後調用目標依賴項對象的SetBinding方法。數據綁定到代碼隱藏中的CLR屬性

但是,如果我們綁定的屬性是CLR屬性,並且您無法提供SetBindingDependencyProperty參數,那麼您如何執行此操作?

編輯:該對象實現INotifyPropertyChanged,如果這是相關的。

回答

0

如果我正確理解你的問題,你有一個FrameworkElement暴露未備份爲一個普通的老式普通財產依賴屬性。但是,您希望將其設置爲綁定的目標。

首先獲得雙向綁定工作也不太可能在大多數情況下是不可能的。但是,如果您只想要一種方式綁定,那麼您可以創建一個附加屬性作爲實際屬性的代理。

讓我想象我有一個StatusDisplay框架元素,它具有一個字符串Message屬性,對於某些真正愚蠢的原因不支持Message作爲依賴項屬性。

public static StatusDisplaySurrogates 
{ 
    public static string GetMessage(StatusDisplay element) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     return element.GetValue(MessageProperty) as string; 
    } 

    public static void SetMessage(StatusDisplay element, string value) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     element.SetValue(MessageProperty, value); 
    } 

    public static readonly DependencyProperty MessageProperty = 
     DependencyProperty.RegisterAttached(
      "Message", 
      typeof(string), 
      typeof(StatusDisplay), 
      new PropertyMetadata(null, OnMessagePropertyChanged)); 

    private static void OnMessagePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     StatusDisplay source = d as StatusDisplay; 
     source.Message = e.NewValue as String; 
    } 
} 

當然如果StatusDisplay控制有其Message財產直接修改因任何理由代孕的國家將不再匹配。不過這對你的目的可能並不重要。

0

等等。 你想綁定2 CLR屬性?讓我說這樣的事情是不可能以正常方式實現的。例如。沒有一種硬核破解可以使你的整個應用程序不穩定。 綁定的一端必須是DependencyProperty。期。

0

您可以在控制一個CLR屬性的綁定DepenencyProperty,例如。在這個cae中,CLR屬性是綁定的源,而DependencyProperty是綁定的目標。爲了使其工作,具有CLR屬性的類必須實現INotifyPropertyChanged。

這裏是你如何在後面的代碼做到這一點:

Binding canModifyBinding = new Binding(); 
canModifyBinding.Source = LastRecord; 
canModifyBinding.Path = new PropertyPath("CanModify"); 
BindingOperations.SetBinding(this, CanModifyProperty, canModifyBinding); 

在這種情況下,綁定對象表示有關資料來源的信息:什麼對象是源,該對象的哪個屬性是一個你「重新感興趣。BindingOperations.SetBinding是指定哪個的DependencyProperty在其上的DependencyObject是結合(參數分別爲2 & 1)目標,和結合使用以獲得在源的靜態方法。

HTH

託尼

相關問題