2010-09-29 122 views
1


我想实现一个面板来设置用户权限。所以我有一个PermissionListView,其中ItemSource是一个ObservableCollection,并且在这个PermissionListView中,我为每个绑定到PermissionViewModel.Checked的Item绑定了一个复选框。我调试它,这工作。当项目属性更改时更新列表视图

用户在另一个ListView(UserListView)中被选中。但我没有看到更多的MVVM方法来检查包含在UserListView.SelectedItem.Permissions中的权限,而不是简单地使用OnSelectionChanged事件遍历ObservableCollection并设置PermissionViewModel.Checked = true或false。

但由于属性的更改不会触发CollectionChanged事件,所以面板仍显示最后一个用户的选择。

  1. 有没有想办法完成一个更多的MVVM“检查也是UserListView.SelectedItem.Permissions所有PermissionViewModels”?

  2. 如果不是,那么在设置列表项目的选中属性后,如何在列表视图中导致可见的更新?

回答

1

我可以在实际用户和权限中使用示例,因此我将继续创建一个 - 请告诉我,如果这与您尝试执行的操作不符。

你有用户和权限是这样的(我使用*为选择是或 - 托运):

UserListView  PermissionsListView 

*Fred*    Read Yes 
Wilma    Write - 
Barney    Execute - 
Betty 

所以PermissionsListView目前呈现出弗雷德的权限。看起来你想知道如何在Barney被选中时更改权限列表以显示Barney的权限。

您可以做的是将OnSelectionChanged绑定到模型,以便它更新所选用户,然后通过另一个属性提供权限。

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); 
    } 
} 

然后,您使用数据模板或网格视图来显示选中或未选中的权限。我假设他们是否被选中或是否被选中是权限的一部分,否则将权限和选中/未选中的状态包含在他们自己的一个小视图模型中。如果他们不在用户身上,那么无论他们来自哪里,都可以从他们那里获得。

请随时问任何我不明白的东西;没有照片就很难确定你在做什么!

0

作为其他答案,你应该实现INotifyPropertyChanged - 我也会引入一个CollectionView并设置IsSynchronizedWithCurrentItem = true,并且改变处理选择,而不是从视图中分离。

您还可以查看http://mvvmfoundation.codeplex.com/和PropertyObserver类。

相关问题