Пример списка выбора WPF MVVM - PullRequest
1 голос
/ 08 апреля 2010

Я ищу способ легко вести список пользователей, принадлежащих к определенной группе.
Я думал об использовании списка выбора, где у меня есть 2 списка, первый содержит список пользователей, а второй список пользователей, принадлежащих к группе. Там будут кнопки, позволяющие добавлять и удалять выбранных пользователей из группы. При добавлении пользователей они перемещаются из левого списка справа, а при удалении они перемещаются справа в список. Это довольно распространенная ситуация.

Вам известны какие-либо примеры выполнения этого в WPF с использованием шаблона MVVM?

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

Это лучший способ выполнить эту функцию или есть лучший способ. Я просто хочу выбрать из списка (список может быть большим).

1 Ответ

1 голос
/ 08 апреля 2010

Это должно быть просто реализовать. В вашей модели представления создайте два наблюдаемых свойства коллекции, одно из которых содержит пользователей, не входящих в группу, и одно, содержащее пользователей, которые являются. Также создайте свойства выбранного элемента для каждой коллекции. Привязать к этим свойствам свойства элементов управления ItemsSource и SelectedItem. Затем реализуйте команды, которые удаляют выбранный элемент из одной коллекции, добавляют его в другую и привязывают эти команды к вашим кнопкам.

Самый простой способ отслеживать, какие пользователи были удалены, это не делать. Когда придет время обновить базу данных, сравните содержимое коллекций модели представления с тем, что находится в вашей базе данных. Если объект в вашей коллекции «не в группе» и база данных считает, что он находится в группе, удалите его. Если объект находится в вашей коллекции "in group", а база данных считает, что это не так, добавьте его.

...