Елементи за проследяване, проверени при преминаване през ListView

Имам изглед на списък като този:

<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 -> Е колекцията. т.е. източникът на данни за списъка.

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

person Akon    schedule 26.03.2014    source източник


Отговори (2)


За да намерите маркираните елементи във вашия списък Имате булево свойство, за да обвържете квадратчето за отметка,

foreach (TheObjectYouBindedForYourList item in FinalFileNames )
{
  if (item.Checked== true)
  {
  }
}
person Sajeetharan    schedule 26.03.2014
comment
Използвам Parallel.Foreach, в който не мога да получа свойство Checked. - person Akon; 26.03.2014

Трябва да добавите свойство Checked към обектите във вашата колекция FinalFileNames. Виждам, че вече се обвързвате с идентификатора на свойствата и името във вашия XAML, така че ще приема, че това не е колекция от примитивни типове. Така че, ако вашият клас изглежда така:

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

добавете свойство Checked към него

public bool Checked { get; set; }

След това във вашия XAML можете да добавите стил, който обвързва свойството IsSelected на ListViewItem със свойството Checked на вашия обект.

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

Сега свойството Checked ще бъде зададено на вашия обект FileName всеки път, когато е избран ListViewItem и може да бъде проверено във вашия код Parallel.ForEach:

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