Я рекомендую создать класс для использования в качестве ViewModel. Класс должен содержать, по крайней мере, свойство, указывающее, выбран ли элемент, текст для представления и сам объект модели или его ключ.
Вы можете создать набор объектов модели представления, просто соединив набор всех навыков с навыками отдельного кандидата и установив IsSelected
для результата ненулевого теста на навыке кандидата.
Затем вы можете привязать напрямую к ViewModel.
Однажды у меня была похожая ситуация (Пользователи на Разрешения вместо Кандидатов на Навыки), и я использовал этот ресурс в качестве отправной точки. Надеюсь, это поможет.
В моем случае у меня была кнопка «Сохранить», которая при нажатии запускала некоторый код с выделенным кодом, чтобы перебирать выбранные элементы и передавать их в мой веб-сервис. Не зная деталей ваших данных и реализации сервиса, я не буду загромождать пост мельчайшими подробностями.
Удачи!
Комментарии к обсуждению
Вот процедура псевдо-LINQ, создающая модели представлений с помощью двух вызовов базы данных:
var userskills = database.CandidateSkills
.Where(cs => cs.UserId == someUserId)
.Select(cs => cs.SkillId)
.ToList();
var skills = from s in database.Skills
select new CandidateSkillViewModel()
{
Text = s.SkillName,
IsSelected = userskills.Contains(s.SkillId),
Value = s.SkillId
};
mylist.ItemsSource = skills;
Это даст вам привязываемый источник данных. В конечном итоге, используя этот шаблон, вам придется переводить выделенные / отмененные выделения во вставки / удаления вручную. Для меня я делаю это в обработчике для нажатия кнопки. Я получаю новый набор навыков кандидата, перебираю элементы списка и вставляю / удаляю экземпляры CandidateSkill по мере необходимости.
Я понимаю, что в зависимости от нажатия кнопки, чтобы разрешить мое состояние модели представления в операциях с базой данных, пуристы не могли бы рассматривать их как завершенные MVVM, но это работало для меня.
Надеюсь, это поможет немного больше.