Обновление ListView при изменении свойств элементов - PullRequest
1 голос
/ 29 сентября 2010


Я хочу реализовать панель для установки пользовательских разрешений. Так что у меня есть PermissionListView, где ItemSource является ObservableCollection, и в этом PermissionListView у меня есть флажок для каждого элемента, который связан с PermissionViewModel.Checked. Я отладил это, и это работает.

Пользователь выбирается в другом ListView (UserListView). Но я не вижу более MVVM-подобного метода для проверки разрешений, содержащихся в UserListView.SelectedItem.Permissions, чем просто использовать событие OnSelectionChanged для перебора ObservableCollection и установки PermissionViewModel.Checked = true или false.

Но поскольку изменение свойств не вызывает событие CollectionChanged, на панели все еще отображается выбор последнего пользователя.

  1. Есть ли еще MVVM-подобный способ выполнить 'Проверить все PermissionViewModel, которые также есть в UserListView.SelectedItem.Permissions'?

  2. Если нет, как я могу вызвать видимое обновление в ListView после установки Проверенных свойств элементов списка?

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Я мог бы использовать пример с реальными пользователями и разрешениями, поэтому я собираюсь создать его - скажите, пожалуйста, не соответствует ли это тому, что вы пытаетесь сделать.

Выиметь пользователей и такие разрешения (я использую * для выбранных и да или - для отмеченных):

UserListView        PermissionsListView

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

Так что PermissionsListView в настоящее время показывает разрешения Фреда.Кажется, что вы хотите знать, как изменить список разрешений, чтобы отображать разрешения Барни, когда Барни выбран.

Что вы можете сделать, это связать 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);
   }
}

Затем вы используете шаблон данных или представление сетки, чтобы показать проверенные или непроверенные разрешения.Я предполагаю, являются ли они проверенными или непроверенными, является частью разрешений здесь, иначе оберните разрешения и проверенное / непроверенное состояние в небольшой собственной ViewModel.Если они не принадлежат пользователю, отправляйтесь за ним, откуда бы они ни были.

Пожалуйста, не стесняйтесь спрашивать то, чего я не понял;трудно понять, что ты делаешь без картинки!

0 голосов
/ 29 сентября 2010

В качестве другого ответа вы должны реализовать INotifyPropertyChanged - я бы также ввел CollectionView и установил IsSynchronizedWithCurrentItem = true, а выбор дескриптора изменился вместо этого вместо представления.

Вы также можете проверить http://mvvmfoundation.codeplex.com/ и класс PropertyObserver.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...