方法: ObservableCollection を作成およびバインドする
この例では、項目が追加または削除されたときに通知するコレクション クラスである ObservableCollection<T> クラスから派生したコレクションを作成およびバインドする方法を示します。
例
NameList
コレクションの実装例を次に示します。
public class NameList : ObservableCollection<PersonName>
{
public NameList() : base()
{
Add(new PersonName("Willa", "Cather"));
Add(new PersonName("Isak", "Dinesen"));
Add(new PersonName("Victor", "Hugo"));
Add(new PersonName("Jules", "Verne"));
}
}
public class PersonName
{
private string firstName;
private string lastName;
public PersonName(string first, string last)
{
this.firstName = first;
this.lastName = last;
}
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
}
Public Class NameList
Inherits ObservableCollection(Of PersonName)
' Methods
Public Sub New()
MyBase.Add(New PersonName("Willa", "Cather"))
MyBase.Add(New PersonName("Isak", "Dinesen"))
MyBase.Add(New PersonName("Victor", "Hugo"))
MyBase.Add(New PersonName("Jules", "Verne"))
End Sub
End Class
Public Class PersonName
' Methods
Public Sub New(ByVal first As String, ByVal last As String)
Me._firstName = first
Me._lastName = last
End Sub
' Properties
Public Property FirstName() As String
Get
Return Me._firstName
End Get
Set(ByVal value As String)
Me._firstName = value
End Set
End Property
Public Property LastName() As String
Get
Return Me._lastName
End Get
Set(ByVal value As String)
Me._lastName = value
End Set
End Property
' Fields
Private _firstName As String
Private _lastName As String
End Class
このコレクションをバインディングに使用できるようにする方法は、「XAML でデータをバインディング可能にする」で説明した、他の共通言語ランタイム (CLR) オブジェクトの場合と同様です。 たとえば、XAML でコレクションをインスタンス化し、次に示すように、そのコレクションをリソースとして指定します。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:SDKSample"
x:Class="SDKSample.Window1"
Width="400"
Height="280"
Title="MultiBinding Sample">
<Window.Resources>
<c:NameList x:Key="NameListData"/>
...
</Window.Resources>
その後、コレクションにバインドできます。
<ListBox Width="200"
ItemsSource="{Binding Source={StaticResource NameListData}}"
ItemTemplate="{StaticResource NameItemTemplate}"
IsSynchronizedWithCurrentItem="True"/>
NameItemTemplate
の定義は、ここには示していません。
注意
コレクション内のオブジェクトは、「バインディング ソースの概要」で説明されている要件を満たす必要があります。 具体的には、OneWay または TwoWay を使用している場合は (たとえば、ソース プロパティが動的に変更されたときに UI を更新する場合など)、INotifyPropertyChanged インターフェイスなどの適切なプロパティ変更通知メカニズムを実装する必要があります。
詳しくは、「データ バインディングの概要」の「コレクションへのバインド」をご覧ください。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET Desktop feedback