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