2012-12-02 25 views
7

Tôi có một mạng lưới tài sản hiển thị một danh sách, ví dụ của một lớp PersonLàm cách nào để bạn kiểm soát nội dung hiển thị trong lưới thuộc tính khi chạy?

[TypeConverter(typeof(ExpandableObjectConverter))] 
public class Person 
{ 
    public bool ShowHidden { get; set; } 
    public string Name { get; set; } 
    //[Browsable(false)] 
    public string Hidden { get; set; } 

    public override string ToString() 
    { 
     return string.Format("Person({0})", Name); 
    } 
} 

Câu hỏi đặt ra là làm thế nào để tôi kiểm soát các thuộc tính Browsable() khi chạy như vậy mà khi ShowHidden = false dòng Hidden (đánh dấu màu vàng bên dưới) được bỏ qua .

Screenshot

Cảm ơn.

Trả lời

10

Dưới đây là một ví dụ:

PropertyDescriptor descriptor= 
    TypeDescriptor.GetProperties(this.GetType())["DataType"]; 
BrowsableAttribute attrib= 
    (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)]; 
FieldInfo isBrow = 
    attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance); 
isBrow.SetValue(attrib,false); 

Chỉ cần thay thế DataType với tên thuộc tính của bạn. Lưu ý, tất cả các thuộc tính phải có thuộc tính được thay đổi (trong trường hợp này là Có thể duyệt được). Nếu một trong các thuộc tính thiếu thuộc tính, thì tất cả thuộc tính lớp sẽ nhận cài đặt thuộc tính mới.

Mã được lấy từ đây: Exploring the Behaviour of Property Grid.

+0

Cảm ơn gợi ý. Tôi chưa làm nó hoạt động. Tôi không thể tìm ra vị trí tốt nhất cho đoạn mã này là gì. Tôi có nó trong một setter tài sản, nhưng tôi thấy không có hiệu lực trên lưới của tôi. – ja72

+0

Điều tôi mong đợi là chỉ xóa hàng cho cá thể có 'ShowHidden = false', nhưng nó loại bỏ hàng khỏi tất cả các cá thể. Tôi sẽ chấp nhận câu trả lời như nó đã kinda những gì tôi cần. – ja72

+2

Mã thay đổi thuộc tính BrowsableAttribute, nhưng tôi không thấy thay đổi về lưới ... làm cách nào tôi có thể thấy thời gian chạy thay đổi? – FrancescoDS

Các vấn đề liên quan