2014-06-20 2 views
0

SelectionMode="Extended"SelectionUnit="FullRow"이 설정되어 있어도 SelectionChanged 이벤트를 디버깅 할 때 SelectedItems에는 항상 하나의 선택된 항목 만 있습니다.WPF DataGrid에서 여러 행을 선택할 수 없습니다

<DataGrid Grid.Row="0" AutoGenerateColumns="False" Margin="5,5,5,0" 
     Name="dgrMembersClub1" ItemsSource="{Binding .}" CanUserAddRows="False" 
      SelectionMode="Extended" SelectionUnit="FullRow" SelectionChanged="Grid_SelectionChanged"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Joining" > 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding IsSelected}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTextColumn IsReadOnly="True" Header="Surname" Binding="{Binding Surname}" /> 
     <DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding Name}" /> 
     <DataGridTextColumn IsReadOnly="True" Header="Club" Binding="{Binding Club_Id, Converter={StaticResource ClubName}}" /> 
     <DataGridTextColumn IsReadOnly="True" Header="City" Binding="{Binding City}" /> 
    </DataGrid.Columns> 
</DataGrid> 

그리고 내 Grid_SelectionChanged 이벤트 : 내가 (App.xaml에서) 트리거 설정을 할

private void Grid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DataGrid grid = (DataGrid)sender; 
    var test = grid.SelectedItems; //Count == 1 (always) 

} 

선택 교류에 대한 배경과 전경 브러시를 변경

내 데이터 그리드입니다 행. 관련성이있는 경우 알려 주시면 코드를 추가하겠습니다.

* EDIT *

당신이 그것에있는 동안. 셀 템플릿에서 확인란을 선택하는 데 도움이 될 수도 있습니다. 예쁜

데이터 격자의 selectedItems를 속성이 아니라, 선택한 항목의 목록이 포함
+0

SelectedItems에 바인딩 할 수 있습니다. –

+0

@GayotFow : 그러면 DataGrid에서 선택되지 않은 항목이 모두 제거됩니다. 맞습니까? 그건 내가 원하는 것이 아니야. 문제는 하나 이상의 행을 선택할 수 없다는 것입니다. – DerpyNerd

+0

아니요, 아무것도 눈금에서 제거되지 않습니다. 선택한 항목의 배열입니다. 나는 항상 그것을 묶는다. –

답변

0

...

private void DataGrid_SelectionChanged(object sender, 
    SelectionChangedEventArgs e) 
{ 
    // ... Get SelectedItems from DataGrid. 
    var grid = sender as DataGrid; 
    var selected = grid.SelectedItems; 

    foreach (var item in selected) 
    { 
     var dog = item as Dog; 
    } 
} 

이 나타내는 이벤트 핸들러가 selectedItems를을 얻고 그것을 통해 루프를 :)하시기 바랍니다.

그러나,주의있다 ".의 selectionMode 속성이 단일로 설정되어있는 경우, selectedItems를가 목록 만의 selectedItem 속성 값을 포함합니다"

자료 : 그것을 전송할뿐만 아니라 그것에 LINQ 작업을 수행 할 수 있도록 http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.selecteditems(v=vs.95).aspx

selectedItems를 재산권 IList의 상속. 또한 인접하지 않은 선택으로도 잘 작동합니다.

추가 팁 : http://www.dotnetperls.com/datagrid

+0

감사합니다. 데이터 그리드 및 항목 선택 아이디어에 익숙하지 않습니다. 문제는 여러 항목을 선택하더라도 CTRL 키를 누를 필요가없는 Windows Phone 및 Windows RT와 같은 모바일 플랫폼에 익숙하다는 것입니다. 내가 클릭 할 항목을 추가/제거 할 수있는 컬렉션을 정의해야합니다. 대개 깜박임이 발생합니다. 하지만 여전히 대답 해 주셔서 감사합니다.) – DerpyNerd

+1

도움이 있습니다. 데이터 그리드 조리법에 대한 저서는 템플릿으로 사용할 수있는 다양한 패턴을 많이 비 춥니 다. –