Если я правильно понимаю ваш вопрос, у вас есть FrameworkElement
, который показывает простое старое обычное свойство, которое не резервируется как свойство зависимости.Однако вы хотели бы установить его в качестве цели привязки.
Прежде всего, получение привязки TwoWay к работе было бы маловероятным и в большинстве случаев невозможным.Однако, если вам нужна только односторонняя привязка, вы можете создать присоединенное свойство как суррогат фактического свойства.
Предположим, у меня есть 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
, измененное напрямую по любой причине, состояние этого суррогата не будетдлиннее совпадение.Тем не менее, это может не иметь значения для ваших целей.