2011-04-09 49 views
9

我有這樣的代碼:WPF ListViewItem的項目複選框

<ListView Height="238" 
       HorizontalAlignment="Left" 
       Name="listView1" 
       VerticalAlignment="Top" 
       Width="503" 
       ItemsSource="{Binding}" 
       IsSynchronizedWithCurrentItem="True"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox Tag="{Binding ID}"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" /> 
        <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 

enter image description here

我怎麼知道有多少複選框被選中,並得到每個複選框的值標籤選擇?

+0

你可以請更詳細說明你想達到什麼? – 2011-04-09 15:49:02

+0

我使用複選框刪除行被選中,但我無法獲得複選框的值標籤被選中。 – 2011-04-09 15:55:38

+1

已綁定到ListView的對象的集合具有已與Checkbox的Tag屬性綁定的屬性ID。相反,在該對象中有一個布爾屬性,並將其與Checkbox的IsChecked屬性綁定。然後,您可以簡單地在viewmodel中迭代您的集合,並查看用戶選擇了哪些項目。您需要注意的其他事項:1.使您的對象實現INotifyPropertyChanged。 2.使用複選框的雙向綁定。讓我們知道你是否需要一些示例代碼。 – publicgk 2011-04-09 16:08:55

回答

5

它應該像將CheckBoxIsChecked屬性綁定到ViewModel上的屬性一樣簡單(您可能需要添加一個新屬性,如果它尚不存在)。然後,單擊按鈕後,您只需迭代集合中的所有項目,並刪除選中的項目(基於ViewModel上屬性的值)。

8

我知道這是舊的,但留給後人,如果人們茬在此,這裏的解決方案

<ListView Height="238" 
       HorizontalAlignment="Left" 
       Name="listView1" 
       VerticalAlignment="Top" 
       Width="503" 
       ItemsSource="{Binding}" 
       IsSynchronizedWithCurrentItem="True" 
       SelectionChanged="listView1_SelectionChanged"> 
     <ListView.View> 
      <GridView> 
       <GridView.Columns> 
        <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 ID}" Header="ID" /> 
        <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> 
       </GridView.Columns> 
      </GridView> 
     </ListView.View> 
    </ListView> 

然後在CS文件代碼這在listView1_SelectionChanged

private List<MyObject> lstMyObject = new List<MyObject>(); 

private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    foreach (MyObject item in e.RemovedItems) 
    { 
     lstMyObject.Remove(item); 
    } 

    foreach (MyObject item in e.AddedItems) 
    { 
     lstMyObject.Add(item); 
    } 
} 

lstMyObject應該是同一類型的綁定到列表的對象。代碼將簡單地將對原始列表項目的引用添加到該列表並將其刪除。

現在你要做的就是遍歷那個只包含實際選定項目的列表。這僅適用於單一選擇,只是lstMyObject將始終只包含1條記錄。