WPFのリストビューでコードビハインドで、リストアイテムとなるオブジェクトから表示用のプロパティを指定する方法を確認します。
ソースコード
ファイル名:ListViewSample01.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
プロジェクトはWPFで作成しています。他のパッケージは不要。
ファイル名:MainWindow.xaml.cs
using System.Windows;
using System.IO;
using System.Windows.Controls;
namespace ListViewSample01;
public partial class MainWindow : Window
{
public class FileItem
{
public string FilePath { get; set; } = "";
public string FileName { get; set; } = "";
}
public MainWindow()
{
InitializeComponent();
LoadFiles(@"C:\Windows\System32");
}
private void LoadFiles(string directory)
{
var items = new List<FileItem>();
foreach (var path in Directory.GetFiles(directory))
{
items.Add(new FileItem
{
FilePath = path,
FileName = Path.GetFileName(path)
});
}
FileListView.ItemsSource = items;
}
private void FileListView_SelectionChanged(object? sender, SelectionChangedEventArgs e)
{
if (FileListView.SelectedItem is not FileItem item)
return;
MessageBox.Show($"Path: {item.FilePath}");
}
}
Windowクラスを継承したMainWindowクラス(ユーザークラス)。
MainWindowコンストラクタで、LoadFile(パス)でリストビューの内容を初期化しています。
引数パスを元にファイルの一覧を取得し、itemsにFileItemクラスのインスタンスを追加しています。
FileItemクラスはリストビューのリストアイテムとになります。FileItemクラスではFilePathとFileNameを持ち、ListViewではFileName(ファイル名)のみを表示するようにしています。
FileListView_SelectionChanged()メソッドはリストビューの選択されたアイテムが変更された際よびだされ、メッセージボックスを表示する処理を行います。
メッセージボックスで表示する文字列は、FilePath(フルパス)の方を表示しています。
ファイル名:MainWindow.xaml
<Window x:Class="ListViewSample01.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:ListViewSample01"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ListView
x:Name="FileListView"
DisplayMemberPath="FileName"
SelectionChanged="FileListView_SelectionChanged"
Margin="60"/>
</Grid>
</Window>
ListViewの名前はx:Nameで定義しており、FileListViewと名称にしていますが、こちらはコードビハインドでListViewを指定する際使います。
DisplayMembarPathは表示する項目で、FileNameを指定しています。
SelectionChangedは選択項目が変更されたさい呼び出すメソッドの指定、このコードの場合FileListView_SelectionChanged()を呼び出します。
Marginはリストビューの外側の余白になります。60という数値を設定したので少し大きめな余白が確保されます。
実行イメージ
・起動するとリストビューにファイル名の一覧が表示される。

・リストビューでファイルを選択するとメッセージボックスでフルパスが表示される。
最後に
今回のサンプルコードは、見た目的にはListBoxと同じですが、ListViewを用いることで、表示する文字列と利用する(メッセージボックスで表示した)文字列を、別の文字列扱うことが出来るようになります。
ListBoxと比べてコード量が増えますが、自由度はListViewのほうが高いので、状況に応じで使い分けたいと思います。

コメント