C# 如何将CheckListBox itemsSource设置为类对象的所有属性?
我使用的是WPF checkListBox,我想用下面给出的类的所有属性填充它的元素。我有一个名为Person的类C# 如何将CheckListBox itemsSource设置为类对象的所有属性?,c#,wpf,checklistbox,C#,Wpf,Checklistbox,我使用的是WPF checkListBox,我想用下面给出的类的所有属性填充它的元素。我有一个名为Person的类 namespace MyProject { public class Person { public enum PersonFields { PersonPermission1, PersonPermission2, } bool _personPerm
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。如图所示。
是的,我得到了答案
chkListBoxPerson.ItemsSource = typeof(Person).GetProperties();
chkListBoxPerson.DisplayMemberPath = "Name";
这里chkListBoxPerson是我的复选框的名称。如果你真的想得到你所有财产的名称,你可以得到如下列表:
typeof(Person).GetTypeInfo().DeclaredProperties.Select(prop => prop.Name).ToList(),
我注意到您还有一个匹配的内部枚举
,因此您可以使用它的值:
Enum.GetNames(typeof(Person.PersonFields));
在这两种情况下,您仍然需要额外的代码来根据用户操作设置属性值
我认为更好的方法是使用字典
权限:
var personPermissions = new Dictionary<Person.PersonFields, bool>
{
{ Person.PersonFields.PersonPermission1, false },
{ Person.PersonFields.PersonPermission2, false }
}
var personPermissions=新字典
{
{Person.personfeelds.PersonPermission1,false},
{Person.personfeelds.PersonPermission2,false}
}
现在,您可以将
字典
绑定到项目资源
,显示键
,并将值
绑定到复选框。这可能有助于您达到目的:您必须这样做的具体原因是什么?更常见的方法是只有一个属性同时保存PersonPermission1
和PersonPermission2
的值。然后您可以将ItemsSource绑定到该属性I这样做是因为我想设置不同人员的权限。您可以通过使用Converter
绑定ItemsSource
并使用Reflection
来获取所有属性。但对于双向工作的复选框绑定,您需要有对实际属性的引用。如果您确定Person类只有这两个属性,为什么不直接将其与该属性绑定呢?Thanx@RohitVats,但我得到了答案。