如何检查列表视图项是否已选中

时间:2010-09-10 20:53:39

标签: c# winforms event-handling listviewitem

用户选择了包含文件的文件夹。我正在制作一个列表视图,显示所选文件夹中的文件。我想显示每个文件包含的内容,但我想在用户从listviewitem检查文件时显示它。我正在使用以下代码:

if (listView1.Items[0].Checked == true)
{
   //....
}

为什么不起作用?我应该如何使用来自的数据:

button1.Click(...)button2.Click(...)

3 个答案:

答案 0 :(得分:3)

不确定您正在寻找什么,但有很多方法可以确定检查ListView中的哪些项目:

// This loops through only the checked items in the ListView.
foreach (ListViewItem checkedItem in listView1.CheckedItems) {
    // All these ListViewItems are checked, do something...
}

// This loops through all the items in the ListView and tests if each is checked.
foreach (ListViewItem item in listView1.Items) {
    if (item.Checked) {
        // This ListViewItem is Checked, do something...
    }
}

您可以使用ListViewItem类来检查每个所选项目的详细信息。

答案 1 :(得分:1)

您正在捕捉哪个事件?请记住,如果它是ItemCheck,则如果该项目是已选中/未选中的项目,则无法使用listView1.Item[0].Checked。您需要使用ItemCheckEventArgs参数,并使用e.Index在检查整个listview元素时排除该元素。使用e.NewValue分别评估引发ItemCheck事件的项目。

答案 2 :(得分:0)

我会创建一个不错的MVVM设计。 ViewModel将有一个ObservableCollection FileList,其中File将包含您想要的任何信息。这个类还有一个IsFileSelectedUI属性,以便你可以在你的代码中。然后在XAML中很容易:

<ScrollViewer Grid.Column="0" Grid.Row="1" >
<ItemsControl ItemsSource="{Binding FileList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="Gray" BorderThickness="1" Margin="2" Padding="2">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding IsFileSelectedUI , Mode=TwoWay}"/>
                    <TextBlock Text="{Binding FileName}"/>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

然后事情就像:

  

FileList.Where(文件=&GT; file.IsFileSelectedUI)   等

如果我理解你所说的话:)