[C# WPF] ObservableCollectionをListBoxとBindingする
ListBoxへのObservableCollectionのBinding手順をよく忘れるのでまとめ。
もくじ
ObservableCollectionの場合
単純に文字列のコレクションをBindingする場合はこうなります。
サンプルコード
<Window x:Class="Sample_ObservableCollection.MainWindow"
x:Name="xMainWindow"
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:Sample_ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<ListBox Margin="20"
ItemsSource="{Binding JapaneseCalendar, Mode=OneWay, ElementName=xMainWindow}"
SelectionMode="Single"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
>
</ListBox>
</Window>
using System.Collections.ObjectModel;
using System.Windows;
namespace Sample_ObservableCollection
{
public partial class MainWindow : Window
{
/// <summary>ListBox要素のコレクション</summary>
public ObservableCollection<string> JapaneseCalendar { get; private set; } = new ObservableCollection<string>();
public MainWindow()
{
InitializeComponent();
JapaneseCalendar.Add("明治");
JapaneseCalendar.Add("大正");
JapaneseCalendar.Add("昭和");
JapaneseCalendar.Add("平成");
JapaneseCalendar.Add("令和");
}
}
}
ObservableCollection>の場合
Tupleをコレクションにしている場合です。
単純にコレクションの中身をTupleに変える
こうなります。

using System;
using System.Collections.ObjectModel;
using System.Windows;
namespace Sample_ObservableCollection
{
public partial class MainWindow : Window
{
/// <summary>ListBox要素のコレクション</summary>
public ObservableCollection<Tuple<string, string>> JapaneseCalendar { get; private set; } = new ObservableCollection<Tuple<string, string>>();
public MainWindow()
{
InitializeComponent();
JapaneseCalendar.Add(Tuple.Create("明治", "meiji"));
JapaneseCalendar.Add(Tuple.Create("大正", "taisyo"));
JapaneseCalendar.Add(Tuple.Create("昭和", "showa"));
JapaneseCalendar.Add(Tuple.Create("平成", "heysay"));
JapaneseCalendar.Add(Tuple.Create("令和", "reiwa"));
}
}
}
表示する要素を指定する
これでは使い物にならないので、表示に使用する要素を指定します。
Xaml側にDataTemplateを設定することで、表示する項目を選択できます。
以下はTupleのItem1を表示にしようするサンプルです。
Binding先をItem2に変えると、Item2が表示に使用されます。

<Window x:Class="Sample_ObservableCollection.MainWindow"
x:Name="xMainWindow"
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:Sample_ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<ListBox Margin="20"
ItemsSource="{Binding JapaneseCalendar, Mode=OneWay, ElementName=xMainWindow}"
SelectionMode="Single"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Item1}" TextTrimming="CharacterEllipsis"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Window>
おしまい。




ディスカッション
ピンバック & トラックバック一覧
[…] [C# WPF] ObservableCollectionをListBoxとBindingする – Pelican Philosophy […]