Как видно из заголовка, я заметил, что категории не отображаются в ** PropertyGrid * (в редакторе коллекции по умолчанию) для коллекции (Of T), когда все свойства класса "T" доступны только для чтения..
Код ниже представляет структуру кода, которую я имею:
C #:
[TypeConverter(typeof(ExpandableObjectConverter))]
public class TestClass1 {
public TestClass2 TestProperty1 {get;} = new TestClass2();
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public sealed class TestClass2 {
[TypeConverter(typeof(CollectionConverter))]
public ReadOnlyCollection<TestClass3> TestProperty2 {
get {
List<TestClass3> collection = new List<TestClass3>();
for (int i = 0; i <= 10; i++) {
collection.Add(new TestClass3());
}
return collection.AsReadOnly();
}
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public sealed class TestClass3 {
[Category("Category 1")]
public string TestProperty3 {get;} = "Test";
}
VB.NET:
<TypeConverter(GetType(ExpandableObjectConverter))>
Public Class TestClass1
Public ReadOnly Property TestProperty1 As TestClass2 = New TestClass2()
End Class
<TypeConverter(GetType(ExpandableObjectConverter))>
Public NotInheritable Class TestClass2
<TypeConverter(GetType(CollectionConverter))>
Public ReadOnly Property TestProperty2 As ReadOnlyCollection(Of TestClass3)
Get
Dim collection As New List(Of TestClass3)
For i As Integer = 0 To 10
collection.Add(New TestClass3())
Next
Return collection.AsReadOnly()
End Get
End Property
End Class
<TypeConverter(GetType(ExpandableObjectConverter))>
Public NotInheritable Class TestClass3
<Category("Category 1")>
Public ReadOnly Property TestProperty3 As String = "Test"
End Class
Проблема заключается вс TestProperty3 .Когда это только для чтения, категория («Категория 1») не отображается в сетке свойств ...
Но если я это сделаюсвойство редактируемое, затем отображается категория ...
C: #
[Category("Category 1")]
public string TestProperty3 {get; set;} = "Test";
VB.NET:
<Category("Category 1")>
Public Property TestProperty3 As String = "Test"
Более того, давайте представим, что в TestClass3 объявлено 10 свойств (вместо 1, как в этом примере), 9 из них доступны только для чтения, а 1 - редактируемый.то в этом случае будут показаны все категории.С другой стороны, если все 10 свойств доступны только для чтения, категории не будут показаны.
Такое поведение PeopertyGrid очень раздражает и неожиданно для меня.Я хотел бы видеть свои пользовательские категории независимо от того, объявлены ли в моем классе свойства с установщиком или без него.
Какие альтернативы у меня есть, чтобы показать категории, имеющие все свойства моего класса только для чтения ?.Может быть, написание пользовательского TypeConverter или редактора коллекции могло бы исправить это раздражающее поведение визуального представления?.