У меня есть класс, который имеет свойство коллекции только для чтения - это список поставщиков расширений, которые были применены к элементу управления.
Я реализовал простой дескриптор свойства для коллекции, чтобы свойство можно было развернуть в сетке свойств для проверки каждой записи.
Когда я выбираю провайдера расширителя и задаю для него значение false, я удаляю его из коллекции. Требуется метод GetProperties преобразователя типов и обновляется сетка свойств.
Однако, когда я устанавливаю для поставщика расширений значение true и, таким образом, добавляю его в коллекцию, GetProperties не запрашивается.
Каким-то образом в сетке свойств проводится различие между добавлением и удалением из коллекции. Или, альтернативно, его обновление при добавлении поставщика расширений, но не при его удалении.
Как я могу обновить сетку при добавлении в коллекцию?
Я пробовал INotifyPropertyChanged и (PropertyName) изменен, но безуспешно.
ETA:
Я собрал небольшой образец, чтобы разобраться в моей проблеме. Для краткости этот пример использует массив и будет сохраняться, хотя и не правильно. Это не влияет на поведение во время разработки, хотя:
Public Class MyButton
Inherits Button
Private _Col As String()
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
Public ReadOnly Property Col() As String()
Get
Return Me._Col
End Get
End Property
Private _AlterCol As String
''''''<RefreshProperties(RefreshProperties.All)> _
Public Property AlterCol() As String
Get
Return _AlterCol
End Get
Set(ByVal value As String)
_AlterCol = value
ReDim Preserve Me._Col(Me._Col.Length)
Me._Col(Me._Col.Length - 1) = value
End Set
End Property
Public Sub New()
ReDim Me._Col(2)
Me._Col(0) = "Fred"
Me._Col(1) = "Jim"
Me._Col(2) = "Bob"
End Sub
End Class
Теперь, чтобы увидеть поведение в действии, добавьте MyButton в форму, разверните свойство Col и введите некоторый текст в свойство AlterCol.
Расширенные вложенные свойства в Col не изменятся. Однако закомментируйте RefreshProperties.All, и он будет запрашиваться и обновляться.
Моя проблема в том, что я не обновляю Col из свойства Read / Write. Я обновляю его в ответ на добавление внешнего провайдера.
Мне нужно как-то обновить сетку свойств. Единственный способ, которым я могу думать об этом, - фиктивное свойство, украшенное RefreshProperties, которому я присваиваю измененное значение.
Есть идеи?