Ответ 1
В результате в обработчике событий SelectionChanged я использовал немного кода для установки свойства модели представления. Проще чем создавать обертки объектов.
У меня есть WPF ListBox
, который я хотел бы
ListBox
иЭти два требования кажутся несовместимыми. Моя модель представления имеет свойство ObservableCollection<T>
для привязки к этому элементу ListBox; Я установил привязку в XAML из свойства в свойство ListBox.SelectedItems
. Когда я скомпилировал, у меня возникла ошибка, говоря, что свойство SelectedItems
было только для чтения и не могло быть установлено из XAML.
Я привязываюсь к неправильному свойству управления? Есть ли способ привязать список ListBox с множественным выбором в XAML к свойству коллекции модели представления? Благодарим за помощь.
В результате в обработчике событий SelectionChanged я использовал немного кода для установки свойства модели представления. Проще чем создавать обертки объектов.
Что вы можете сделать, чтобы обойти это:
Создайте свойство IsSelected для элементов, отображаемых в списке. Im, предполагая, что они представлены моделью просмотра. Таким образом, не должно быть драмы, чтобы добавить дополнительное свойство. Если это просто бизнес-объекты, подумайте об использовании класса-обертки, чтобы безболезненно обернуть их в виде элементов модели (бесстыдная плагин - здесь - одна из таких систем. это ежедневно, чтобы обернуть мои бизнес-объекты)
Используйте стиль контейнера элементов, чтобы привязать свойство IsSelected элемента списка к свойству IsSelected элементов, которые вы показываете, например
<ListBox.ItemContainerStyle>
<!-- This Style binds a ListBoxItem to a the ViewModelItem. -->
<Style
TargetType="{x:Type ListBoxItem}">
<Setter
Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</ListBox.ItemContainerStyle>
(может потребоваться основанный на атрибуте стиль, не уверен)
Теперь, когда элемент списка выбирается, ваша модель просмотра будет знать об этом и может обновлять свою внутреннюю коллекцию по мере необходимости.
Я опубликовал метод, позволяющий привязку только для чтения к свойству SelectedItems
WPF DataGrid, просто расширив DataGrid, который, как я считаю, может быть легко кооптирован для ListBox. Вы можете видеть мой пост в fooobar.com/info/391720/...