綁定到依賴項屬性在代碼隱藏中很容易。您只需創建一個新的System.Windows.Data.Binding
對象,然後調用目標依賴項對象的SetBinding
方法。數據綁定到代碼隱藏中的CLR屬性
但是,如果我們綁定的屬性是CLR屬性,並且您無法提供SetBinding
的DependencyProperty
參數,那麼您如何執行此操作?
編輯:該對象實現INotifyPropertyChanged
,如果這是相關的。
綁定到依賴項屬性在代碼隱藏中很容易。您只需創建一個新的System.Windows.Data.Binding
對象,然後調用目標依賴項對象的SetBinding
方法。數據綁定到代碼隱藏中的CLR屬性
但是,如果我們綁定的屬性是CLR屬性,並且您無法提供SetBinding
的DependencyProperty
參數,那麼您如何執行此操作?
編輯:該對象實現INotifyPropertyChanged
,如果這是相關的。
綁定目標必須是依賴屬性!這是數據綁定工作的唯一要求!
更多在這裏閱讀:
如果我正確理解你的問題,你有一個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
財產直接修改因任何理由代孕的國家將不再匹配。不過這對你的目的可能並不重要。
等等。 你想綁定2 CLR屬性?讓我說這樣的事情是不可能以正常方式實現的。例如。沒有一種硬核破解可以使你的整個應用程序不穩定。 綁定的一端必須是DependencyProperty。期。
您可以在控制一個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
託尼