如何将CheckListBox itemsSource设置为类对象的所有属性?

时间:2014-02-09 07:10:03

标签: c# wpf checklistbox

我正在使用WPF checkListBox我希望用下面给出的类的所有属性填充其元素。我有一个名为Person的课程

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

2 个答案:

答案 0 :(得分: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 }
}

现在您可以将Dictionary绑定到ItemsSource,显示Key并将Value绑定到复选框。

答案 1 :(得分:0)

是的,我得到了答案......

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

这里chkListBoxPerson是我的CheckListBox的名称。