2013-09-20 2 views
5

Проблема проста (и я надеюсь, что это имеет простое решение!): Я хочу скрыть (Browsable (false)) свойство «Element» (в моем объекте PropertyGrid), когда он равен нулю.C# .Net 4.5 PropertyGrid: как скрыть Свойства

public class Question 
    { 
     ... 

     public int Element 
     { 
     get; set; 
     } 
    } 
+0

Это не просто, атрибуты не являются условными. Вы дошли до того, что PropertyGrid перестает быть полезным. Затем вы переключаетесь на форму с элементами управления для каждого свойства. Теперь все просто. –

ответ

6

Что вы можете сделать, это использовать повторно DynamicTypeDescriptor класс, описанный в моем ответе на этот вопрос здесь, на SO: PropertyGrid Browsable not found for entity framework created property, how to find it?

например,

public Form1() 
{ 
    InitializeComponent(); 

    DynamicTypeDescriptor dt = new DynamicTypeDescriptor(typeof(Question)); 

    Question q = new Question(); // initialize question the way you want  
    if (q.Element == 0) 
    { 
     dt.RemoveProperty("Element"); 
    } 
    propertyGrid1.SelectedObject = dt.FromComponent(q); 
} 
14

Самый простой способ, чтобы скрыть свойство в PropertGrid и в Custom Control для меня это:

public class Question 
{ 
    ... 

    [Browsable(false)] 
    public int Element 
    { 
    get; set; 
    } 
} 
+0

С помощью инструментария PropertyGrid WPF это работает! – imekon

+3

Это не динамический режим, не работает во время выполнения, поэтому он не отвечает на вопрос. –

+0

Вы можете установить атрибут Browsable во время выполнения, см. Https://stackoverflow.com/a/47836429/1518546 –

Смежные вопросы