WPF遍历列表视图中的项目

时间:2010-08-20 19:42:10

标签: wpf vb.net

我有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 :(得分:0)

您可以在不使用SelectedItems的情况下访问listview中的项目,只需使用ListView.Items。这样你就不必改变选择。

您的基础模型是否未正确触发属性更改通知?如果没有,你就设置了IsChecked,但他们没有告诉列表视图。

具体什么不起作用?