Отключить раскрывающийся список со списком, когда связанное свойство помечено как доступное только для чтения

У меня есть служба, которая устанавливает для атрибута ReadOnly свойства значение true/false во время выполнения, поэтому пользователь не сможет изменить значение свойства в propertyGrid.

Сервис полезен, когда свойство редактируется в текстовом редакторе. Однако некоторые из моих редакторов являются выпадающими списками. Я хочу, чтобы раскрывающийся список был отключен, когда я устанавливаю свойство только для чтения, то есть пользователь сможет видеть выбранный элемент в поле со списком, но когда он щелкает стрелку рядом с полем со списком, чтобы увидеть параметры, ничего не произойдет. это не работает с текущей реализацией. Думаю, мне нужно использовать другой атрибут для свойства. Я пытался изменить "EditableAttribute" свойства, но это не работает.... Код, который я использую для изменения свойства только для чтения:

        PropertyDescriptor descriptor = TypeDescriptor.GetProperties(obj)[property];
        ReadOnlyAttribute attribute = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
        FieldInfo fieldInfo = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
        fieldInfo.SetValue(attribute, value);

Есть идеи?


person mmm    schedule 24.03.2016    source источник
comment
Вы пытались использовать публичное свойство IsReadOnly вместо поля?   -  person Domysee    schedule 24.03.2016
comment
Это не имеет значения, так как для текстового редактора приведенный выше код работает....   -  person mmm    schedule 24.03.2016
comment
Вы реализовали это в MVVM? Пытались ли вы привязать свойство в VM к свойству IsEnabled Combobox в поле зрения.   -  person Gopichandar    schedule 24.03.2016
comment
Да, и это сработает. Мне нужно, чтобы реализация находилась на уровне модели, то есть я хочу изменить только связанные атрибуты свойств. Я не знаю, возможно ли это...   -  person mmm    schedule 24.03.2016


Ответы (1)


В стандартном поле со списком WPF IsReadOnly действует только при IsEditable = true, но не мешает пользователю выбирать значения. это просто делает редактируемое текстовое поле доступным только для чтения.

Чтобы полностью предотвратить выбор элемента управления, вы должны использовать IsEnabled = false.

person Gopichandar    schedule 24.03.2016
comment
Есть ли какой-либо атрибут самого свойства binnded, который я могу изменить, чтобы поле со списком было отключено без привязки свойства поля со списком isEnabled? - person mmm; 24.03.2016
comment
@mmm Я не могу найти такой атрибут. Позвольте мне сделать быстрый поиск по нему. - person Gopichandar; 24.03.2016