WPF перебирает элементы в просмотре списка - PullRequest
0 голосов
/ 20 августа 2010

У меня есть ListView с CheckBox в качестве одного из столбцов, связанных с логическим свойством пользовательского объекта. Я пытаюсь выяснить, как перебирать элементы в ListView и проверять все флажки. То, что у меня есть, ниже:

XAML:

<ListView x:Name="MyListView" DockPanel.Dock="Top" Height="275" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Enabled">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Path=IsChecked}" Click="CheckBox_Click" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

VB.NET:

Private Sub SelectAll_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles SelectAll.Click
    Dim currSelected As Integer = MyListView.SelectedIndex
    MyListView.SelectAll()
    For ixItem As Integer = 0 To MyListView.SelectedItems.Count - 1
        coItems(ixItem).IsChecked = True
    Next
    MyListView.SelectedIndex = currSelected
End Sub

У меня есть догадка, это на самом деле довольно легко, и я просто пропускаю где-то одну строку. Спасибо за помощь!

ОБНОВЛЕНИЕ: Проблема, в частности, заключается в том, что флажки, которые видны при нажатии кнопки, отображаются не как отмеченные, а те, которые не видны (поскольку пользователю необходимо прокрутить вниз, чтобы увидеть их) отображаются как проверенные.

ОБНОВЛЕНИЕ 2: В соответствии с запросом приведен код PropertyChanged. Я все еще довольно новичок в WPF, я не так много сделал с INotifyPropertyChanged.

Public Property blnIsChecked() As Boolean
        Get
            Return _blnIsChecked
        End Get
        Set(ByVal value As Boolean)
            _blnIsChecked = value
        End Set
    End Property

Public Event PropertyChangedHandler(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

1 Ответ

0 голосов
/ 21 августа 2010

Вы можете получить доступ к элементам списка без использования SelectedItems, просто используйте ListView.Items Таким образом, вам не нужно менять выбор.

Ваша базовая модель не запускает должным образом уведомления об изменении свойств? если нет, вы устанавливаете IsChecked на них, но они не сообщают о просмотре списка.

Что конкретно не работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...