Я пытаюсь отфильтровать свой список в стиле Excel.
Что мне нужно:
- сортировка по возрастанию / убыванию
- Функция прямого поиска
- Флажки для отображения всех или только выбранных
Эти параметры фильтра должны отображаться, когда я щелкаю заголовок столбца и после выбора метода фильтра список должен обновляться в зависимости от выбранного фильтра / метода сортировки.
На самом деле я могу создать обычный ListView и заполнить его значениями из списка структуры
Шаблон: Что я ищу
Мой XAML:
<ListView x:Name="lVTable" SelectionMode="Single" Margin="28,231,32,26" HorizontalContentAlignment="Center">
<RowDefinition Height="auto"/>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Column1}" Width="120">
<GridViewColumnHeader Content ="Column1"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column2}" Width="120">
<GridViewColumnHeader Content =" Column2"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column3}" Width="220">
<GridViewColumnHeader Content =" Column3"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column4}" Width="220">
<GridViewColumnHeader Content =" Column4"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column5}" Width="220">
<GridViewColumnHeader Content =" Column5"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column6}" Width="220">
<GridViewColumnHeader Content =" Column6"/>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Column7}" Width="220">
<GridViewColumnHeader Content =" Column7"/>
</GridViewColumn>
</GridView>
</ListView.View></ListView>
Мой код позади:
public struct ListViewElement
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
public string Column6 { get; set; }
public string Column7 { get; set; }
public string Column8 { get; set; } //Not for listview
public string Column9 { get; set; } //Not for listview
}
public List<ListViewElement> listViewElements;
public void Button_Click(object sender, RoutedEventArgs e)
{
ListViewElement listViewElement1 = new ListViewElement
{
Column1 = "Object1",
Column2 = "APP1",
Column3 = "File1",
Column4 = "0.1.4",
Column5 = "0.1.4",
Column6 = "Some Information",
Column7 = "Okay"
};
listViewElements.Add(listViewElement1);
ListViewElement listViewElement2 = new ListViewElement
{
Column1 = "Object2",
Column2 = "App1",
Column3 = "Var1",
Column4 = "0.1.4",
Column5 = "0.1.3",
Column6 = "Some Information",
Column7 = "Not Okay"
};
listViewElements.Add(listViewElement2);
ListViewElement listViewElement3 = new ListViewElement
{
Column1 = "Object1",
Column2 = "App1",
Column3 = "File2",
Column4 = "0.1.4",
Column5 = "0.1.3",
Column6 = "Some Information,
Column7 = "Not Okay"
};
listViewElements.Add(listViewElement3);
ListViewElement listViewElement4 = new ListViewElement
{
Column1 = "Object1",
Column2 = "App2",
Column3 = "File2",
Column4 = "0.1.4",
Column5 = "0.1.4",
Column6 = "Some Information,
Column7 = "Okay"
};
listViewElements.Add(listViewElement4);
foreach(ListViewElement element in listViewElements)
{
var row = new { Column1 = element.Column1, Column2 = element.Column2, Column3 = element.Column3, Column4 = element.Column4, Column5 = element.Column5, Column6 = element.Column6, Column7 = .Column7};
lVTable.Items.Add(new ListViewItem { Content = row, Background = Brushes.White });
} }
Как мне создать такой -> окно фильтра <- </p>
- отображается после нажатия на заголовок столбца
- с кнопками для:
- сортировка по возрастанию / убыванию
- выбрать все / конкретные элементы
- с текстовым полем для прямого поиска
- можно использовать для всех столбцов
- Удалить после нажатия ОК
- А попробовать его выбранные методы в списке?