代码之家  ›  专栏  ›  技术社区  ›  Riddari

WPF遍历ListView中的项

  •  0
  • Riddari  · 技术社区  · 16 年前

    我有一个 ListView 用一个 CheckBox 作为列之一,绑定到自定义对象的布尔属性。我正在尝试了解如何迭代 列表视图 并选中所有复选框。到目前为止,我有以下几点:

    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还比较陌生,我以前对inotifypropertieschanged做得不多。

    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 回复  |  直到 16 年前
        1
  •  0
  •   John Gardner    16 年前

    您可以在不使用selecteditems的情况下访问listview中的项目,只需使用listview.items。这样就不必更改选择。

    基础模型是否未正确触发属性更改通知?如果没有,你会对他们进行检查,但他们不会告诉ListView。

    什么 具体地 不工作?