Se ho capito bene la tua domanda si dispone di una FrameworkElement
che espone una pianura vecchia proprietà comune che non viene eseguito il backup come Proprietà di dipendenza. Tuttavia, si desidera impostarlo come obiettivo di una rilegatura.
Prima di ottenere il binding di TwoWay sul lavoro sarebbe improbabile e nella maggior parte dei casi impossibile. Tuttavia, se si desidera un collegamento unidirezionale, è possibile creare una proprietà associata come surrogato della proprietà effettiva.
Immaginiamo di avere un elemento quadro StatusDisplay
con una stringa Message
proprietà che per qualche motivo davvero stupido non supporta Message
come proprietà di dipendenza.
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;
}
}
Naturalmente se il controllo StatusDisplay
ha la proprietà Message
modificato direttamente per qualsiasi motivo, lo stato di questo surrogata non sarà più corrispondere. Ciò potrebbe non essere importante per i tuoi scopi.