方法 : XAML でデータをバインディング可能にする

ここでは、アプリケーションでの必要に応じて、Extensible Application Markup Language (XAML) でデータをバインディング可能にするさまざまな方法について説明します。

使用例

XAML からcommon language runtime (CLR) オブジェクトにバインドする場合、そのオブジェクトをバインディング可能にする方法の 1 つは、それをリソースとして定義し、x:Key を指定することです。 次の例では、PersonName という名前の文字列プロパティを持つ Person オブジェクトがあります。 この Person オブジェクトは、SDKSample という名前空間で定義されます。

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:SDKSample"
  SizeToContent="WidthAndHeight"
  Title="Simple Data Binding Sample">

  <Window.Resources>
    <src:Person x:Key="myDataSource" PersonName="Joe"/>


...


</Window.Resources>

その後、次の例に示すように、XAML でそのオブジェクトにバインドします。

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

または、次の例に示すように、ObjectDataProvider クラスを使用することもできます。

<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
  <ObjectDataProvider.ConstructorParameters>
    <system:String>Joe</system:String>
  </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

同じようにバインディングを定義します。

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

ここに示す例では、結果は同じになります。Joe というテキスト コンテンツを持つ TextBlock が得られます。 これに対し、ObjectDataProvider クラスは、メソッドの結果にバインドするなどの機能を提供します。 ObjectDataProvider クラスが提供する機能が必要な場合は、そちらを使用してください。

ただし、既に作成されているオブジェクトにバインドする場合は、次の例に示すように、コード内で DataContext を設定する必要があります。

    Private myDataSet As DataSet

    Private Sub OnInit(ByVal sender As Object, ByVal e As EventArgs)
      Dim mdbFile As String = Path.Combine(AppDataPath, "BookData.mdb")
      Dim connString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile)
      Dim conn As New OleDbConnection(connString)
      Dim adapter As New OleDbDataAdapter("SELECT * FROM BookTable;", conn)

      myDataSet = New DataSet()
      adapter.Fill(myDataSet, "BookTable")

      ' myListBox is a ListBox control.
      ' Set the DataContext of the ListBox to myDataSet
      myListBox.DataContext = myDataSet
    End Sub
DataSet myDataSet;

private void OnInit(object sender, EventArgs e)
{
  string mdbFile = Path.Combine(AppDataPath, "BookData.mdb");
  string connString = string.Format(
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
  OleDbConnection conn = new OleDbConnection(connString);
  OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM BookTable;", conn);

  myDataSet = new DataSet();
  adapter.Fill(myDataSet, "BookTable");

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}

XmlDataProvider クラスを使用して、バインディングで使用する XML データにアクセスするには、「方法 : XMLDataProvider と XPath クエリを使用して XML データにバインドする」を参照してください。 ObjectDataProvider クラスを使用して、バインディングで使用する XML データにアクセスするには、「方法 : XDocument、XElement、または LINQ for XML クエリの結果にバインドする」を参照してください。

バインド先とするデータを指定するさまざまな方法については、「方法 : バインディング ソースを指定する」を参照してください。 バインド先として指定できるデータの型、またはバインディング用に独自のcommon language runtime (CLR) オブジェクトを実装する方法については、「バインディング ソースの概要」を参照してください。

参照

概念

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

その他の技術情報

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