Ваша цель состоит в проверке выбранных элементов из ListBox
: требуется как минимум один выбранный элемент. Во-первых, есть разные способы обработки самого выбора:
a) Вы можете использовать механизм выбора ListBox
через ListBox.SelectedItem
.
Полагаю, вы можете указать привязку как SelectedItem="{Binding SelectedThing, ValidatesOnNotifyDataErrors=True}"
и регулярная проверка WPF работает. Не уверен, хорошо ли это работает с множественным выбором.
b) Вы можете использовать ListBox.SelectedItems
. Привязка невозможна и должна быть подделана с помощью кода за обработчиком событий. Таким образом, валидация WPF не может быть запущена здесь.
c) Вы используете свое собственное свойство IsSelected
(или подобное) для каждого элемента, либо явно привязанное к вашей модели просмотра через CheckBox
, либо косвенно через ListBoxItem.IsSelected
(через ListBox.ItemContainerStyle
).
Здесь вы можете создать свойство bool IsValidSelection
в вашей модели представления, которое будет обновляться при изменении выбора. Или вы можете запустить правила проверки для любого из результирующих свойств вашей модели представления (например, SelectedItems
). Тем не менее, вы не проверяете само ограничение ListBox.ItemSource
! Поэтому стандартные механизмы WPF не работают (поле со списком не получает красной границы или чего-либо еще).
Обходные
Вы можете явно создавать уведомления об ошибках, показывая невидимое в противном случае Label
и связывая его видимость с вышеупомянутым свойством bool IsValidSelection
. Это очень явный способ, вообще не использующий проверку WPF.
Вы можете изменить INotifyDataErrorInfo
(или аналогичную) реализацию, чтобы вызвать ошибки для другого имени свойства. Это невозможно, если вы используете общий ValidatableViewModel<T>
(как и я). Я предполагаю, что это было намерением другого ответа.