我想实现一个面板来设置用户权限。所以我有一个 PermissionListView,其中 ItemSource 是一个 ObservableCollection,在这个 PermissionListView 中,我为每个绑定(bind)到 PermissionViewModel.Checked 的项目都有一个复选框。我调试了它,这有效。
用户在另一个 ListView(UserListView) 中被选中。但我没有看到比简单地使用 OnSelectionChanged 事件遍历 ObservableCollection 并设置 PermissionViewModel.Checked = true 或 false 更类似于 MVVM 的方法来检查 UserListView.SelectedItem.Permissions 中包含的权限。
但是由于属性的更改不会触发 CollectionChanged 事件,因此面板仍会显示最后一个用户的选择。
最佳答案
我可以使用具有实际用户和权限的示例,所以我将继续创建一个 - 如果这与您尝试做的不匹配,请告诉我。
您拥有这样的用户和权限(我使用 * 表示选中,使用 Yes 或 - 表示选中):
UserListView PermissionsListView
*Fred* Read Yes
Wilma Write -
Barney Execute -
Betty
所以 PermissionsListView 当前显示的是 Fred 的权限。似乎您想知道如何更改权限列表以在选择 Barney 时显示 Barney 的权限。
您可以做的是将 OnSelectionChanged 绑定(bind)到模型,以便它更新所选用户,然后通过另一个属性提供权限。
MyPermissionsListModel : INotifyPropertyChanged
{
Command OnSelectionChanged(User user) {
// Command which calls ChangeSelectedUser
}
private void ChangeSelectedUser(User user) {
_user = user;
PropertyChanged(this, new PropertyChangedEventArgs("Permissions");
}
public ObservableCollection<Permission> Permissions {
return new ObservableCollection<Permission>(_user.Permissions);
}
}
然后使用数据模板或 GridView 来显示选中或未选中的权限。我假设它们是否被选中或未选中是这里权限的一部分,否则将权限和选中/未选中状态包装在他们自己的一个小 ViewModel 中。如果他们不在用户身上,那么从他们来自的任何地方获取他们。
有什么不懂的请随时提问;没有图片就很难准确地知道你在做什么!
关于wpf - 项目属性更改时更新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820310/