WPF DataGrid скрывает RowDetails или отменяет выбор строку

У меня есть DataGrid, который является RowDetails, установлен показать при выборе (RowDetailsVisibilityMode = "VisibleWhenSelected"). Теперь я хочу смочь избавиться от него! Я поместил близкую кнопку на детали строки с этим кодом:

private void Button_Click(object sender, RoutedEventArgs e)
  {
   e.Handled = true;
   Button button = sender as Button;
   DataGridRow row = button.FindAncestor<DataGridRow>();

   row.DetailsVisibility = Visibility.Collapsed;
  }

Тот код получает меня 90% там, но после того как строка детализирует, сворачивается для данной строки, это не появится в следующий раз, когда строка выбрана.

11
задан Nate Zaugg 17 March 2010 в 23:20
поделиться

3 ответа

Я тоже с этим столкнулся. Вот решение:

Оставьте эту кнопку в RowDetails и немного измените ее код. Вместо того чтобы фокусироваться на видимости отдельного ряда, установите свойство SelectedIndex в DataGrid равным -1 (нет выбранных).

DataGrid1.SelectedIndex = -1;

Поскольку ваш RowDetailsVisibilityMode - VisibleWhenSelected, DataGrid свернет/скроет все развернутые RowDetails. Это хорошо работает, когда режим SelectionMode - Single.

13
ответ дан 3 December 2019 в 04:31
поделиться

попробуйте добавить row.DetailsVisibility = Visibility.Visible; в событие RowDetailsVisibilityChanged .

1
ответ дан 3 December 2019 в 04:31
поделиться

Попробуйте установить стиль на кнопку с сеттерами, которые устанавливают свойства Command, CommandParameter кнопки. Вам нужно будет создать класс, который дополняет ICommand, и включить его как StaticResource в XAML. Здесь я использовал DataGridRowHeader в качестве кнопки вместо кнопки в деталях строки.

     <local:DeselectRowCommand x:Key='deselectCommand' />
            <Setter Property='Command' Value='{StaticResource deselectCommand}' />
                <Setter Property='CommandParameter' 
    Value='{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
AncestorType=wpf:DataGridRow}}' />

В методе Execute команды вы можете получить DataGridRow из параметра команды и применить любые методы, которые вам нужны.

По крайней мере, таким образом вы можете поделиться этим стилем или создать на его основе другие и повторно использовать ICommand для других DataGrid, а также меньше обрабатывать события.

Вы можете увидеть рабочий пример в этом проекте Silverlight-to-WPF DataGrid с открытым исходным кодом.

1
ответ дан 3 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: