我有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
答案 0 :(得分:0)
您可以在不使用SelectedItems的情况下访问listview中的项目,只需使用ListView.Items。这样你就不必改变选择。
您的基础模型是否未正确触发属性更改通知?如果没有,你就设置了IsChecked,但他们没有告诉列表视图。
具体什么不起作用?