Я пытаюсь реализовать простую функцию скрытия / отображения строк.
Пользователю показывается DataGrid со строками, с левой стороны есть кнопка «Скрыть», которая скрывает данную строку. Также есть кнопка «Показать скрытые строки», которая должна показать все строки, в том числе и скрытые. Скрытые строки, должны иметь кнопку слева «Показать строку», чтобы вернуть ее в основную DataGrid. После этого пользователь может снова нажать «скрыть скрытые строки».
Все строки генерируются автоматически.
Мой подход:
Источник DataGrid:
private DataView _dataView;
public DataView DataView
{
get { return _dataView; }
set
{
_dataView = value;
RaisePropertyChanged("DataView");
}
}
В XAML добавлена кнопка «Скрыть» :
<DataGrid.Columns>
<DataGridTemplateColumn Header="Hide Row">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{Binding Path=DataContext.HideRowButtonText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding Path=SelectedIndex, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Command="{Binding Path=DataContext.HideRowCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
Мои попытки:
- Управление DataView
private void HideRow(object obj)
{
DataView.Table.Rows.RemoveAt(Convert.ToInt32(obj));
}
Проблема с этим подходом, который модифицирует фактическое DataView, заключается в что я хочу иметь возможность показывать все строки, когда пользователь нажимает «Показать скрытые строки». Я мог бы создать несколько DataView, которые будут содержать скрытые строки, текущие строки и строки, которые возвращаются. Это кажется не интуитивным.
Свойство видимости в DataGridRow на основе
this. <DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding Path=DataContext.RowVisibility, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</Style>
</DataGrid.RowStyle>
Если для RowVisibilty установить значение "Свернуто", оно свернет все строки, я не смог скрыть только определенную строку.
Я также знаю о
DataTriggers , но это зависит не от самих данных строки, а от пользователя. Я также изучил
Фильтры строк , но, похоже, они зависят от манипулирования DataView. Я также изучил наличие CheckBox, который будет скрывать определенную строку с помощью конвертера видимости, но опять же, не позволяя мне управлять скрытыми строками.
Я пытаюсь найти способ скрыть х количество строк, и сможете управлять ими. Я хочу, чтобы они снова отображались, помечались как скрытые, чтобы пользователь мог снова сделать их видимыми!