C#のListViewで列のタイトルを変える

C#のWPFの方のListViewのグリッド表示モードで、列のヘッダのタイトルをコード側から変えてみました。

目次

  1. アプリ実行中にヘッダの表示を変えない場合
  2. アプリ実行中にヘッダのタイトルを切り替えたい場合

アプリ実行中にヘッダの表示を変えない場合

アプリ実行中に列のヘッダのタイトルを変える必要が無い場合は、XAMLで指定してしまうのが楽でしょう。

例えば、下記のXAMLでは列のヘッダ要素(GridViewColumnHeader)に「Field1」「Field2」というタイトルを設定しています。GridViewColumnHeaderクラスのContentプロパティが、その列のヘッダに表示されるわけですね。

<Window x:Class="listview_trial.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:listview_trial"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200">
    <Grid>
        <ListView>
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumnHeader Name="columnheaderField1" Content="Field1" />
                    </GridViewColumn>
                    <GridViewColumn>
                        <GridViewColumnHeader Name="columnheaderField2" Content="Field2" />
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

これを実行すると下図の様になります。

160213-1-01

表の列のヘッダに、「Field1」「Field2」と表示されてますね。

アプリ実行中にヘッダのタイトルを切り替えたい場合

アプリ実行中にユーザーの操作に従って表の表示内容を変えたい場合があります。その際、表示の中身についてはバインドしているデータを書き換えればバインディングによって表示が更新されます。

同時に列のヘッダの表示も切り替えたいですよね。プログラムのコードでListViewの列ヘッダの表示を変えるにはどうすれば良いでしょうか。

前述のようにGridViewColumnHeaderクラスのContentプロパティが列ヘッダに表示されるので、そのプロパティを書き換えてみます。

まず、XAMLのGridViewColumnHeader要素にName属性を設定します。前述のXAMLの例を参照してください。このNameで列ヘッダを識別します。

コードの例です。

using System.Windows;

namespace listview_trial
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            columnheaderField1.Content = "フィールド1";
            columnheaderField2.Content = "フィールド2";
        }
    }
}

起動直後にヘッダの表示を変更するプログラムです。実際には、ボタンとかのクリックイベントに書いたりすると思います。

XAMLの方でNameを設定しておくと、VisualStudioではIntelliSense様がNameの設定値(この例ではcolumnheaderField1とcolumnheaderField2)を入力候補として表示してくれます。便利ですね。

これを実行すると下図の様になります。

160213-1-02

バインディングしているデータの変更と同時にGridViewColumnHeaderのContentも変更することで、ListViewに表示している表を切り替えたような感じになります。

更新日
公開日

広告