Как создать свойство зависимостей только для чтения?


как создать свойство зависимости только для чтения? Каковы лучшие практики для этого?

в частности, меня больше всего озадачивает тот факт, что нет реализации

DependencyObject.GetValue()  

что происходит System.Windows.DependencyPropertyKey в качестве параметра.

System.Windows.DependencyProperty.RegisterReadOnly возвращает DependencyPropertyKey объект, а не DependencyProperty. Итак, как вы должны получить доступ к свойству зависимостей только для чтения, если вы не можете совершать какие-либо вызовы GetValue? Или вы должны как-то преобразование DependencyPropertyKey в просто

1 57

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 сеттер, это прозрачно для вас.