2014-03-26 37 views
0

我有一個這樣的列表視圖:跟蹤項目,同時通過一個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 ------------ 
        }); 
      }); 

回答

0

找到您的列表 已選中的項目有綁定的複選框的布爾屬性,

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

我使用Parallel.Foreach,其中我無法獲得Checked屬性。 – Akon

0

你應該在你FinalFileNames集合的Checked屬性添加到該對象。我發現你已經綁定到你的XAML中的屬性ID和名稱,所以我會認爲這不是原始類型的集合。所以,如果你的類看起來是這樣的:

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

選中的屬性添加到它

public bool Checked { get; set; } 

然後在你的XAML可以加入其中的ListViewItem的IsSelected屬性綁定到Checked屬性的樣式你的對象。

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

現在Checked屬性將您的文件名對象上時選擇了ListViewItem的設置,它可以在你的Parallel.ForEach代碼進行檢查:

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