方法 : XAML でデータをバインディング可能にする
更新 : 2007 年 11 月
ここでは、アプリケーションでの必要に応じて、Extensible Application Markup Language (XAML) でデータをバインディング可能にするさまざまな方法について説明します。
使用例
XAML から共通言語ランタイム (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 を設定する必要があります。
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;
}
サンプル全体については、「簡単なバインディングのサンプル」および「ADO.NET DataSet のデータとのバインディングのサンプル」を参照してください。
XmlDataProvider クラスを使用して、バインディングで使用する XML データにアクセスするには、「方法 : XMLDataProvider と XPath クエリを使用して XML データにバインドする」を参照してください。ObjectDataProvider クラスを使用して、バインディングで使用する XML データにアクセスするには、「方法 : XDocument、XElement、または LINQ for XML クエリの結果にバインドする」を参照してください。
バインド先とするデータを指定するさまざまな方法については、「方法 : バインディング ソースを指定する」を参照してください。バインド先として指定できるデータの型、またはバインディング用に独自の共通言語ランタイム (CLR) オブジェクトを実装する方法については、「バインディング ソースの概要」を参照してください。