Привязка WPF IsSelected к ViewModel не устанавливает объекты, которые не показали в Списке

У меня есть a ViewModel это имеет IsSelected свойство, которое я связываю в моем ListView.ItemContainerStyle XAML к IsSelected свойство, по моему мнению, модель.

Я поднимаю приложение и заполняю набор модели представления (который показывают в моем ListView) с большим количеством объектов скажите приблизительно в 2000. Затем я выбираю все в списке через Ctrl-A. Объекты, по моему мнению, образцовый набор только добираются IsSelected набор для объектов, которые видимы в ListView. Если я разбиваю на страницы вниз через список IsSelected установлен для любых объектов, показаны. Если я пролистываю все объекты затем все объекты, по моему мнению, модель имеет IsSelected набор свойств к истинному.

Вот мой XAML для привязки IsSelected в списке просматривают к моей модели представления:

<ListView Margin="5" ItemsSource="{Binding FilteredComparisonList}" x:Name="comparisonListView">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Source filename" DisplayMemberBinding="{Binding ImageFile.BaseFilename}" Width="Auto" />
        </GridView>
    </ListView.View>
</ListView>

Почему не IsSelected для всех объектов, по моему мнению, образцовый набор к истинному, когда я выбираю все объекты в ListView?

5
задан Dave Clemmer 15 September 2011 в 18:52
поделиться

3 ответа

Это происходит из-за встроенной виртуализации списка. Если вы не знакомы с этим, то, что он в основном означает, что предметы не становятся реальными, пока они не будут ввиду. Вы можете отключить виртуализацию ListView со следующим недвижимым имуществом:

VirtualizingStackPanel.IsVirtualizing="False"

Но остерегайтесь. Это окажет неблагоприятное влияние на производительность вашего listView. Для 2000 предметов это не будет серьезным, но это может быть заметно.

3
ответ дан 14 December 2019 в 01:08
поделиться

Вы поймали неправильное исключение.

-121--3456779-

Первый шаг для отслеживания этой проблемы - определить, действительно ли это Mcirosoft.mshtml.dll или одна из его зависимостей. Лучший способ сделать это - использовать fuslogvw для отслеживания сбоя загрузки сборки. В нем будет представлена подробная информация о сбое сборки.

Как только вы определите, какая сборка не работает, пожалуйста, отправьте обратно с результатами.

EDIT

Это предупреждающее сообщение указывает на успешное выполнение операции. Похоже, в нем нет ошибки.

-121--2271332-

ListAxItem являются виртуализированными, они не существуют до тех пор, пока не будут созданы (когда они приведены в поле зрения). Однако базовый ListView является производным от ListBox, который имеет свойство SelectedItems. SelectedItems - это список всех выбранных предметов, а не список выбранных ListÂItems. При выводе в режим просмотра ListÂItem его свойство IsSelected задается на основе того, предметом ли оно (отображаемое предметом) в коллекции SelectedItems.

Это предложение для вашей модели просмотра, особенно если вам нужна виртуализация (что вы, вероятно, делаете для 2000 или около того предметов). Мне был бы интересен ответ на вопрос «Как связать мои модели просмотра свойство IsSelected на основе, если предмет находится в коллекции SelectedItem в ListBox?»

ответ, вероятно, включает конвертер

2
ответ дан 14 December 2019 в 01:08
поделиться

МВВВМ способом. Для этого можно было переопределить ярлык CTRL с вашей собственной командой Selectall (создайте команду SELECTALL с ярлыком Ctrl-A). Реализация будет установлена ​​Узел на моделях просмотра.

Ваша недвижимость на вашем представлении должна иметь двустороннюю привязку к модели вашего представления, чтобы элементы отображались на вашем представлении.

Я не думаю, что выключение виртуализации является несессуаром.

Надеюсь, это поможет.

4
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: