Как установить свойство ReadOnly на основе значения, выбранного из другого свойства? - PullRequest
0 голосов
/ 08 ноября 2019

У меня два зависимых свойства - женат и фамилия супруга. Имя супруга должно быть только для чтения, когда брак ложный. Я нашел это решение в своем поиске, но оно не работает на Xceed PropertyGrid - выдайте пустую ссылку на ошибку

Этот метод работает на WinForms, но не на Wpf.

public class Employee
{
    string name;
    bool isMarried;
    string spouseName;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    [System.ComponentModel.RefreshProperties(RefreshProperties.All)]
    public bool IsMarried
    {
        get { return isMarried; }
        set
        {
            isMarried = value;
            bool newValue = !value;
            PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())["SpouseName"];
            ReadOnlyAttribute attrib = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
            FieldInfo isReadOnly = attrib.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
            isReadOnly.SetValue(attrib, newValue);
        }
    }

    [ReadOnly(true)]
    public string SpouseName
    {
        get { return spouseName; }
        set
        {
            spouseName = value;
        }
    }
}

Fieldinfo isReadOnly возвращаетпустой

...