2010-02-07 7 views
0

4 개의 열이있는 눈금보기가있는 목록보기가 있습니다. listview의 itemsSource는 IList (Of SomeType)입니다. 그리드의 각 셀에는 바운드 프로퍼티의 값을 기준으로 선택/선택 해제되는 체크 박스가 있습니다. 이제 저장을 위해 목록/격자보기의 모든 행을 검색하거나 체크 표시된 모든 확인란을 선택하고 싶습니다. 나는 그것을 할 수있는 적절한 방법을 찾지 못했습니다.목록보기 wpf에서 모든 행을 가져 오는 방법

내 목록보기를 만드는 방법은 다음과 같습니다.

   <ListView Margin="10, 40, 95, 10" x:Name="ListViewPane"> 
        <ListView.View> 
         <GridView x:Name="gridColumns"> 
          <GridViewColumn Width="auto" Header="Right" DisplayMemberBinding="{Binding Name}"/> 
          <GridViewColumn Width="auto" Header="Read"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanRead}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Width="auto" Header="Write"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanWrite}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Width="auto" Header="Delete"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanDelete}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
         </GridView> 
         </ListView.View> 
       </ListView> 

아무도 도와 줄 수 있습니까 ????

답변

1

IsChecked Bindings를 Mode = TwoWay로 설정해야합니다.

IsChecked="{Binding CanRead, Mode=TwoWay}" 

그런 다음 WPF는 사용자가 상자를 선택하거나 선택 취소 할 때 비즈니스 개체를 업데이트합니다. 당신이 정말로있는 ListViewItem에 액세스해야하는 경우

For Each busobj In ListViewPane.ItemsSource 
    If busobj.CanDelete Then 
    ' whatever 
    End If 
Next 

합니다 (VB에서 구문 오류를 사면) :

지금 당신은 당신의 비즈니스 개체를 수집합니다 (ItemsSource)에서 직접 값을 수집 할 수 있습니다

For Each busobj In ListViewPane.ItemsSource 
    Dim lvi As ListViewItem = CType(ListViewPane.ItemContainerGenerator.ContainerFromItem(busobj), ListViewItem) 
Next 
+0

감사는 WPF에 올 때, foreach 문 대신있는 ListViewItem의 "VAR"를 사용하십시오 – Xience

2

당신은 throu 반복 할 수는 UI 컨트롤의 물리적 행을 나타냅니다 컨트롤, 당신은 ItemContainerGenerator를 사용하여 얻을 수 있습니다 다른 사람이 편집을 얻을 것이다,

foreach(var item in this.ListViewPane.Items) 
{ 
    var ofSomeType = item as OfSomeType; 
    if(ofSomeType != null) 
    { 
     string name = ofSomeType.Name; 
     bool canDelete = ofSomeType.CanDelete; 
     bool canRead = ofSomeType.CanRead; 
     bool canWrite = ofSomeType.CanWrite; 

     // do stuff with your Of Some Type objects 
    } 
} 
+0

itowlson 많은 : 값을 얻기 위해 ListView의 항목 객체를 GH 오류. ListView.Item과 ListViewItem이 반드시 같을 필요는 없으므로 일부를 혼동시킬 수 있습니다. –

관련 문제