2010-09-29 163 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類。

相關問題