gpt4 book ai didi

c# - WPF MVVM ListBox.ItemTemplate CheckBox IsChecked 绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:05 25 4
gpt4 key购买 nike

我正在处理的场景是编辑角色和权限。在列表框中,我想列出所有已定义的权限并检查已分配所选角色的权限。角色选择出现在单独的列表中。

我有一个简单的 View ,其中包含一个显示所有权限的列表框:

<ListBox             
...
ItemsSource="{Binding AllPermissions}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding DisplayName}"
IsChecked="???"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

ItemsSource 是一组权限,所选角色的权限是另一组。我如何将 IsChecked 值绑定(bind)到集合的交集(即,如果 ListBox 中的权限也在所选角色的权限中,则应选中该框)?

最佳答案

我猜您的 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 绑定(bind)到 RoleHasPermission。

现在我猜你正在从某个地方加载可用的权限,而他们目前不知道角色是否有权限,所以当你加载 AllPermissions 时,计算角色是否有权限。

我假设您继承了一个基类,该基类上有一个 RaisePropertyChanged 事件,以便在值更新时通知 View 。 (例如,如果您使用 mvvm light 或其他框架,则为您提供,或者您可以自己编写)另外,如果您希望能够通过选中/取消选中复选框来编辑权限,那么请记住设置绑定(bind) Mode=TwoWay即:

<ListBox             
...
ItemsSource="{Binding AllPermissions}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding DisplayName}"
IsChecked="{Binding RoleHasPermission, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>

关于c# - WPF MVVM ListBox.ItemTemplate CheckBox IsChecked 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com