Как создать свойство зависимостей только для чтения?
как создать свойство зависимости только для чтения? Каковы лучшие практики для этого?
в частности, меня больше всего озадачивает тот факт, что нет реализации
DependencyObject.GetValue()
что происходит System.Windows.DependencyPropertyKey
в качестве параметра.
System.Windows.DependencyProperty.RegisterReadOnly
возвращает DependencyPropertyKey
объект, а не DependencyProperty
. Итак, как вы должны получить доступ к свойству зависимостей только для чтения, если вы не можете совершать какие-либо вызовы GetValue? Или вы должны как-то преобразование DependencyPropertyKey
в просто
1 ответ:
это легко, на самом деле (через RegisterReadOnly):
public class OwnerClass : DependencyObject // or DependencyObject inheritor { private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass), new FrameworkPropertyMetadata(default(int), FrameworkPropertyMetadataOptions.None)); public static readonly DependencyProperty ReadOnlyPropProperty = ReadOnlyPropPropertyKey.DependencyProperty; public int ReadOnlyProp { get { return (int)GetValue(ReadOnlyPropProperty); } protected set { SetValue(ReadOnlyPropPropertyKey, value); } } //your other code here ... }
вы используете Ключ только тогда, когда вы устанавливаете значение в частном/защищенном/внутреннем коде. Из-за защищенного
ReadOnlyProp
сеттер, это прозрачно для вас.