跟踪通过ListView循环时检查的项目

时间:2014-03-26 06:20:57

标签: wpf listview checkbox parallel.foreach

我有一个这样的列表视图:

<ListView Name="FinalListView"
                  SelectionMode="Multiple"
                  SelectionChanged="FinalListView_SelectionChanged">
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Tag="{Binding ID}"
                                              IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" Width="400"/>
                </GridView>
            </ListView.View>
        </ListView>

正如你可以看到列表视图的每个项目都包含一个复选框,但下面是我的Parallel.Foreach循环,用我的循环迭代并处理这些项目。

请告诉我,如何检查哪个项目,以及未在循环中检查如下

FinalFileNames - &gt;是收藏品。即列表视图的数据源。

Parallel.ForEach(FinalFileNames,
                    new ParallelOptions { MaxDegreeOfParallelism = 4 },
                    path =>
                    {
                        -----code ------------
                    });
            });

2 个答案:

答案 0 :(得分:0)

查找列表中的已检查项目 有一个布尔属性来绑定复选框,

foreach (TheObjectYouBindedForYourList item in FinalFileNames )
{
  if (item.Checked== true)
  {
  }
}

答案 1 :(得分:0)

您应该将Checked属性添加到FinalFileNames集合中的对象。我看到你已经绑定到XAML中的属性ID和Name,所以我假设这不是原始类型的集合。所以,如果你的班级看起来像这样:

public class FileName
{
    public string Name { get; set; }
    public int ID { get; set; }
}

向其添加Checked属性

public bool Checked { get; set; }

然后在您的XAML中,您可以添加一个样式,将ListViewItem的IsSelected属性绑定到对象的Checked属性。

        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <Setter Property="IsSelected" Value="{Binding Checked}"/>
            </Style>
        </ListView.Resources>

现在,只要选择了ListViewItem,就会在FileName对象上设置Checked属性,并且可以在Parallel.ForEach代码中检查它:

        Parallel.ForEach(FinalFileNames,
                new ParallelOptions { MaxDegreeOfParallelism = 4 },
                path =>
                {
                    if (path.Checked)
                    {
                       // code
                    }
                });
        });