У меня есть два представления некоторых данных: теперь вид списка (a ListBox, но я имею в виду переход на ListView) и фантастическое графическое представление на карте. В любом представлении пользователь может щелкнуть объект, и он будет выбран в обоих представлениях. Также возможен мультиселектор, поэтому каждый экземпляр ViewModel имеет свое собственное свойство IsSelected.
В настоящее время я привязываю ListBoxItem.IsSelected к ViewModel.IsSelected, но это работает корректно, если ListBox НЕ виртуализируется (см. здесь). К сожалению, отключение виртуализации ухудшает производительность, и мое приложение стало слишком медленным.
Поэтому мне нужно снова включить виртуализацию. Чтобы сохранить свойство ViewModel.IsSelected элементов вне экрана, я заметил, что ListBox и ListView имеют событие SelectionChanged, которое я могу (предположительно) использовать для распространения состояния выбора из ListBox/ListView в ViewModel.
Мой вопрос: как мне распространять состояние выбора в обратном направлении? Свойство SelectedItems ListBox/ListView доступно только для чтения! Предположим, что пользователь нажимает на элемент в графическом представлении, но он находится вне экрана w.r.t. список. Если я просто установил ViewModel.IsSelected, тогда ListBox/ListView не будет знать о новом выборе, и, как следствие, он не сможет отменить выбор этого элемента, если пользователь нажмет на него другой элемент в списке. Я мог бы вызвать ListBox.ScrollIntoView из ViewModel, но есть несколько проблем:
-  В моем пользовательском интерфейсе фактически можно выбрать два элемента одним щелчком мыши, если они находятся в одном и том же месте графически, хотя они могут находиться в совершенно разных местах в 
ListBox/ListView. - Он разбивает изоляцию ViewModel (мой ViewModel полностью не знает WPF, и я хотел бы сохранить его таким образом.)
 
Итак, мои дорогие эксперты WPF, любые мысли?
EDIT: я перешел на управление Infragistics и использовал уродливое и довольно медленное решение. Дело в том, что мне больше не нужен ответ.