2010-06-01 9 views
1

을 클릭하면 이전에 선택한 행을 유지하고 더 많은 항목을 추가하는 Ctrl + 클릭 동작을 모방하는 방법이 있습니까?WPF DataGrid SelectedItems - 여러 항목을 선택된 상태로 유지하면서

기본적으로 각 행을 클릭하면 이전에 선택한 모든 행이 선택 취소됩니다.

이 작업을 수행하는 한 가지 방법은 SelectionChanged 이벤트를 재정의하고 제거 된 행을 다시 선택하는 것입니다. 어떤 상황에서 내가 할 것이기 때문에

void TestGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
    foreach (var i in e.RemovedItems) 
     TestGrid.SelectedItems.Add(i); 

} 

이, 그러나 좋지 않은 선택 해제 (예 : 열 중 하나에 토글 버튼을 클릭 할 때와 같은) 행.

답변

0

여기에 나를 위해 일한 솔루션 년대.

내가 내 기본 데이터 객체에 RowStyle

이 자원을 할당 한 다음 스타일

<Style x:Key="VisibilityStyle" TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Visible}" Value="False"> 
      <Setter Property="DetailsVisibility" Value="Collapsed" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=Visible}" Value="True"> 
      <Setter Property="DetailsVisibility" Value="Visible" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

을 추가보다는

(기본값으로 모든 것을 유지하기 위해) 정보 가시성을 설정 모든 속성을 제거 Visible 속성을 추가하고 INotifyPropertyChanged 인터페이스를 구현했습니다.

세부 사항 표시/숨기기를 원할 때마다 간단히 내 기본 개체의 Visible 속성을 조작합니다. 이것은 열 단추 처리기에서 내 코드의 다른 곳으로 발생할 수 있습니다. 좋은 작품

0

세트 SelectionModeDataGridSelectionMode.Extended

+1

아니요 .. 시도해 보았습니다. Ctrl 키를 누른 상태에서 여러 선택을 허용합니다. –

+0

질문에 대한 오해가있었습니다. 다른 항목을 클릭하는 동안 항목을 계속 선택하지만 제어 할 수는 없습니까? –

+0

예, Ctrl 키를 누른 상태에서 Ctrl 키를 누른 상태로 동작하는 것을 모방하고 싶습니다. –

2

이것은 꽤 아니지만, 당신이 작동하지 않는 드래그하여 여러 행을 선택으로 살 수 있다면 그것은 작동합니다.

private void dataGrid_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    var dep = (DependencyObject)e.OriginalSource; 

    // iteratively traverse the visual tree 
    while ((dep != null) && 
     !(dep is DataGridRow)) 
    { 
     dep = VisualTreeHelper.GetParent(dep); 
    } 

    if (dep == null) 
     return; 

    if (dep is DataGridRow) 
    { 
     var row = dep as DataGridRow; 
     row.IsSelected = !row.IsSelected; 
     e.Handled = true; 
    } 
} 
관련 문제