我猜你的 AllPermissions 项目来源是 Permission 对象的集合。因此,只需确保除了 DisplayName 之外,它还具有确定角色是否具有权限的内容:
public class Permission : ViewModelBase
{
private string displayName;
private bool roleHasPermission;
public string DisplayName
{
get
{
return this.displayName;
}
set
{
this.displayName = value;
this.RaisePropertyChanged(() => this.DisplayName);
}
}
public bool RoleHasPermission
{
get
{
return this.roleHasPermission;
}
set
{
this.roleHasPermission = value;
this.RaisePropertyChanged(() => this.RoleHasPermission);
}
}
}
所以然后将 IsChecked 绑定到 RoleHasPermission。
现在我猜测您正在从某个地方加载可用权限,并且他们目前不知道角色是否具有权限,因此当您加载 AllPermissions 时,请计算角色是否具有权限。
我假设您从一个基类继承,该基类上有一个 RaisePropertyChanged 事件,以便在值更新时通知视图。(如使用 mvvm light 或其他框架为您提供,或者您可以自己编写)另外如果您希望能够通过选中/取消选中复选框来编辑权限,请记住设置绑定 Mode=TwoWay IE:
<ListBox
...
ItemsSource="{Binding AllPermissions}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding DisplayName}"
IsChecked="{Binding RoleHasPermission, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>