WPF DataGrid SelectedItems - сохранение нескольких выбранных при левом нажатии - PullRequest
1 голос
/ 02 июня 2010

Есть ли способ имитировать поведение Ctrl + клик, который сохраняет выбранные ранее выбранные строки и просто добавляет больше выбранных элементов?

по умолчанию, при нажатии на каждую строку все ранее выбранные строки отменяются.

Один из способов добиться этого - переопределить событие SelectionChanged и повторно выбрать удаленные строки.

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

}

Однако это не идеально, потому что в некоторых ситуациях я хотел бы отменить выбор строк (например, при нажатии кнопки переключения в одном из столбцов).

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Это не красиво, но это работает, если вы можете жить с выбором нескольких строк, перетаскивая не работает.

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;
    }
}
0 голосов
/ 02 июня 2010

вот решение, которое сработало для меня.

я удалил все свойства, которые устанавливают видимость деталей (чтобы все оставалось по умолчанию)

добавлен следующий стиль

<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>

назначил этот ресурс RowStyle

в своем базовом объекте данных я добавил свойство Visible и реализовал интерфейс INotifyPropertyChanged.

Теперь, когда я хочу показать / скрыть детали, я просто манипулирую свойством Visible моего базового объекта. это может происходить от обработчика кнопки столбца до любого другого места в моем коде. прекрасно работает

0 голосов
/ 02 июня 2010

Установите SelectionMode на DataGridSelectionMode.Extended

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...