Jeśli dobrze rozumiem pytanie masz FrameworkElement
że naraża zwykły stary obiekt, który nie jest zwykłą kopię zapasową jako Właściwość Dependency. Jednak chcesz ustawić go jako cel wiązania.
Po pierwsze uzyskanie wiązania TwoWay do pracy byłoby mało prawdopodobne iw większości przypadków niemożliwe. Jednak jeśli chcesz tylko jeden sposób wiązania, możesz utworzyć dołączoną właściwość jako surogat dla rzeczywistej własności.
Pozwala wyobrazić Mam element StatusDisplay
ramową, która ma ciąg Message
właściwość, że z jakiegoś powodu naprawdę głupi nie obsługuje Message
jako właściwość zależność.
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;
}
}
Oczywiście jeśli kontrola StatusDisplay
ma swój Message
właściwość zmodyfikowaną bezpośrednio z jakiegokolwiek powodu stan ten surogat nie będzie pasować. Nadal może to nie mieć znaczenia dla twoich celów.