Подтвердить что ты не робот

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

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

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

DependencyObject.GetValue()  

который принимает параметр System.Windows.DependencyPropertyKey в качестве параметра.

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

Совет и/или код будут НАСТОЯТЕЛЬНО оценены!

4b9b3361

Ответ 1

Это легко, на самом деле (через RegisterReadOnly):

public class OwnerClass : DependencyObject // or DependencyObject inheritor
{
    private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey
        = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass),
            new FrameworkPropertyMetadata((int)0,
                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 это прозрачно для вас.