2014-02-09 40 views
-1

我正在使用WPF checkListBox我想用下面給出的類的所有屬性填充它的元素。而且我有一個名爲Person的類如何將CheckListBox的itemsSource設置爲類對象的所有屬性?

namespace MyProject 
{ 
    public class Person 
    { 
     public enum PersonFields 
     { 
      PersonPermission1, 
      PersonPermission2, 
     } 

     bool _personPermission1; 
     bool _personPermission2; 

     public bool PersonPermission1 
     { 
      get 
      { 
       return _personPermission1; 
      } 
      set 
      { 
       if (_personPermission1!= value) 
       { 
        _personPermission1= value; 
       } 
      } 
     } 

     public bool PersonPermission2 
     { 
      get 
      { 
       return _personPermission1; 
      } 
      set 
      { 
       if (_personPermission2!= value) 
       { 
        _personPermission2= value; 
       } 
      } 
     } 
    } 
} 

我想動態地填充checkListBox及其屬性。如在給定的圖像中。 CheckListBox with dynamic properties

+1

這可能有助於讓你在那裏:http://stackoverflow.com/questions/737151/how-to-get-the-list-of-properties-of-a-class – jwatts1980

+0

你必須做的任何具體原因這條路?更常見的方法是隻有一個屬性保存'PersonPermission1'和'PersonPermission2'的值。然後,您可以將ItemsSource綁定到該屬性 – har07

+0

我這樣做是因爲我想設置不同人員的權限。 –

回答

0

是的,我有我的答案......

chkListBoxPerson.ItemsSource = typeof(Person).GetProperties(); 
chkListBoxPerson.DisplayMemberPath = "Name"; 

這裏chkListBoxPerson是我CheckListBox的名稱。

1

我你真的想要得到所有屬性的名稱,你可以讓他們的名單如下:

typeof(Person).GetTypeInfo().DeclaredProperties.Select(prop => prop.Name).ToList(), 

我注意到你也有一個匹配的內enum,所以你可以使用它的值相反:

Enum.GetNames(typeof(Person.PersonFields)); 

在這兩種情況下,您仍需要額外的代碼才能根據用戶操作設置屬性值。

我認爲更好的辦法是有權限的Dictionary

var personPermissions = new Dictionary<Person.PersonFields, bool> 
{ 
    { Person.PersonFields.PersonPermission1, false }, 
    { Person.PersonFields.PersonPermission2, false } 
} 

現在你可以綁定DictionaryItemsSource,顯示Key並結合Value到複選框。

相關問題