Excel-подобная фильтрация ListView - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь отфильтровать свой список в стиле 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>

  • отображается после нажатия на заголовок столбца
  • с кнопками для:
    • сортировка по возрастанию / убыванию
    • выбрать все / конкретные элементы
    • с текстовым полем для прямого поиска
  • можно использовать для всех столбцов
  • Удалить после нажатия ОК
  • А попробовать его выбранные методы в списке?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...