Home > C# > WPF > WPFコントロール > ListView > C# WPFのListViewのリストを絞り込む

C# WPFのListViewのリストを絞り込む

新規作成日 2020-09-14
最終更新日

ListViewに表示する項目が多いとき、条件を追加してリストの項目を絞り込むことができれば(フィルタリング)、探したい項目を素早く見つけることができます。

実行結果
商品コードを入力する過程で、リストが絞り込まれる

キーボードからの入力で、ListViewのリストの項目がフィルタリングされます。

C#

Product.cs

namespace ListChoiceAssist
{
    class Product
    {
        public string productCode { set; get; }
        
        public string productName { set; get; }

        // コンストラクタを定義
        public Product(string code, string name)
        {
            productCode = code;
            productName = name;
        }
    }
}
MainWindow.xaml
<Window x:Class="ListChoiceAssist.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="250" Width="400
        ">
    <DockPanel>
        <Grid DockPanel.Dock="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock Name="ProductCode" Grid.Column="0"/>
            <TextBlock Name="ProductName" Grid.Column="1"/>
        </Grid>
        <TextBox DockPanel.Dock="Top" Name="ItemSerch" TextChanged="ItemSerch_TextChanged"/>
        <ListView DockPanel.Dock="Bottom" Name="ProductList" Width="Auto" SelectionChanged="ProductList_SelectionChanged">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="商品コード" DisplayMemberBinding="{Binding productCode}"/>
                    <GridViewColumn Header="商品名" DisplayMemberBinding="{Binding productName}" />
                </GridView>
            </ListView.View>
        </ListView>
    </DockPanel>
</Window>
MainWindow.xaml.cs
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace ListChoiceAssist
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            SetDemoData();
        }

       ObservableCollection<Product> products = new ObservableCollection<Product>();

        public void SetDemoData()
        {
            // 動作確認用のデモデータ
            products.Add(new Product("1001", "みかん"));
            products.Add(new Product("1002", "りんご"));
            products.Add(new Product("1003", "ばなな"));
            products.Add(new Product("1011", "もも"));
            products.Add(new Product("1012", "いちご"));
            products.Add(new Product("1013", "ぶどう"));
            products.Add(new Product("1101", "いちじく"));
            products.Add(new Product("1102", "キューイフルーツ"));
            products.Add(new Product("1103", "パインナップル"));
            products.Add(new Product("2001", "さくらんぼ"));
            products.Add(new Product("2002", "オレンジ"));
            products.Add(new Product("2003", "レモン"));
            products.Add(new Product("3011", "メロン"));
            products.Add(new Product("3021", "スイカ"));
            products.Add(new Product("3031", "かき"));
            products.Add(new Product("4001", "ブルーベリー"));
            products.Add(new Product("4002", "ラズベリー"));
            products.Add(new Product("4003", "マンゴー"));
            products.Add(new Product("5001", "プラム"));
            products.Add(new Product("5002", "かぼす"));
            products.Add(new Product("5003", "すだち"));
            products.Add(new Product("6001", "ドラゴンフルーツ"));
            products.Add(new Product("6002", "びわ"));
            products.Add(new Product("6003", "クレープフルーツ"));

            ProductList.ItemsSource = products;
        }

        private void ProductList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // 選択した内容をTextBlockに表示する

            // ListViewで何も選択されていない場合は何もしない
            if (ProductList.SelectedItem == null) return;

            // ListViewで選択されている項目を取り出す
            Product ListItem = (Product)ProductList.SelectedItem;

            //  ListViewで選択されている項目をテキストボックスに表示する
            ProductCode.Text = ListItem.productCode;
            ProductName.Text = ListItem.productName;
        }

        private void ItemSerch_TextChanged(object sender, TextChangedEventArgs e)
        {
            // 検索ボックスへの入力で、ListViewに表示する内容を変更する
            
            var filterList =
                products.Where(x => x.productCode.Contains(ItemSerch.Text)).ToList();
            ProductList.ItemsSource = filterList;
        }
    }
}

参考

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」