Si je comprends bien votre question, vous avez un FrameworkElement
qui expose une propriété ordinaire ancienne plaine qui n'est pas sauvegardé comme Propriété de dépendance. Cependant, vous souhaitez le définir comme cible d'une liaison.
Tout d'abord, il est peu probable que la liaison TwoWay fonctionne, et dans la plupart des cas impossible. Cependant, si vous voulez seulement une liaison à sens unique, vous pouvez créer une propriété jointe en tant que substitut pour la propriété réelle. Imaginons que je possède un élément de structure StatusDisplay
qui possède une propriété de chaîne Message
qui, pour une raison vraiment stupide, ne prend pas en charge Message
comme propriété de dépendance.
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;
}
}
Bien sûr, si le contrôle StatusDisplay
a sa Message
propriété modifiée directement pour quelque raison que l'état de cette substitution ne correspond plus. Cela n'a peut-être pas d'importance pour vos objectifs.