方法 : ObservableCollection を作成およびバインドする

この例では、項目が追加または削除されたときに通知するコレクション クラスである ObservableCollection<T> クラスから派生したコレクションを作成およびバインドする方法を示します。

使用例

NameList コレクションの実装例を次に示します。

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
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; }
      }
  }

このコレクションをバインディングに使用できるようにする方法は、「方法 : XAML でデータをバインディング可能にする」で説明した、他のcommon language runtime (CLR) オブジェクトの場合と同様です。 たとえば、XAML でコレクションをインスタンス化し、次に示すように、そのコレクションをリソースとして指定します。


<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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 インターフェイスなどの、適切なプロパティ変更通知機構を実装する必要があります。

詳細については、「データ バインディングの概要」の「コレクションへのバインド」を参照してください。

参照

処理手順

方法: ビュー内のデータを並べ替える

方法 : ビュー内のデータをフィルター処理する

方法 : XAML でビューを使用してデータの並べ替えおよびグループ化を行う

概念

データ バインディングの概要

その他の技術情報

データ バインディングに関する「方法」トピック