バインディング ソースの概要Binding Sources Overview

データ バインディングでは、バインディング ソース オブジェクトは、データの取得元のオブジェクトを表します。In data binding, the binding source object refers to the object you obtain data from. このトピックでは、バインディング ソースとして使用できるオブジェクトの型について説明します。This topic discusses the types of objects you can use as the binding source.

バインディング ソースの型Binding Source Types

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) データ バインディングでは、次のバインディング ソースの型がサポートされています。 data binding supports the following binding source types:

バインディング ソースBinding Source 説明Description
共通言語ランタイム (CLR)common language runtime (CLR) オブジェクト objects 任意の 共通言語ランタイム (CLR)common language runtime (CLR) オブジェクトのパブリック プロパティ、サブプロパティ、およびインデクサーにバインドできます。You can bind to public properties, sub-properties, as well as indexers, of any 共通言語ランタイム (CLR)common language runtime (CLR) object. バインディング エンジンは、CLRCLR リフレクションを使用してプロパティの値を取得します。The binding engine uses CLRCLR reflection to get the values of the properties. または、オブジェクトを実装するICustomTypeDescriptorかが、登録されているTypeDescriptionProviderバインディング エンジンと連携します。Alternatively, objects that implement ICustomTypeDescriptor or have a registered TypeDescriptionProvider also work with the binding engine.

バインディング ソースとして使用できるクラスを実装する方法の詳細については、このトピックで後述する「バインディング ソースのクラスの実装」を参照してください。For more information about how to implement a class that can serve as a binding source, see Implementing a Class for the Binding Source later in this topic.
動的オブジェクトdynamic objects 実装するオブジェクトの使用可能なプロパティとインデクサーにバインドすることができます、IDynamicMetaObjectProviderインターフェイスです。You can bind to available properties and indexers of an object that implements the IDynamicMetaObjectProvider interface. コード内のメンバーにアクセスできる場合、これにバインドできます。If you can access the member in code, you can bind to it. たとえば、動的オブジェクトを使用して someObjet.AProperty を介してコード内のメンバーにアクセスできる場合、バインディング パスを AProperty に設定してこのメンバーにバインドできます。For example, if a dynamic object enables you to access a member in code via someObjet.AProperty, you can bind to it by setting the binding path to AProperty.
ADO.NETADO.NET オブジェクト objects バインドできるADO.NETADO.NETなどのオブジェクトDataTableです。You can bind to ADO.NETADO.NET objects, such as DataTable. ADO.NETADO.NET DataViewを実装する、IBindingListバインディング エンジンがリッスンしている変更通知を提供するインターフェイスです。The ADO.NETADO.NET DataView implements the IBindingList interface, which provides change notifications that the binding engine listens for.
XMLXML オブジェクト objects バインドして実行するXPathでクエリが実行、 XmlNodeXmlDocument、またはXmlElementです。You can bind to and run XPath queries on an XmlNode, XmlDocument, or XmlElement. アクセスする便利な手段XMLXMLバインド ソース マークアップには、データを使用して、XmlDataProviderオブジェクト。A convenient way to access XMLXML data that is the binding source in markup is to use an XmlDataProvider object. 詳細については、「XMLDataProvider と XPath クエリを使用して XML データにバインドする」を参照してください。For more information, see Bind to XML Data Using an XMLDataProvider and XPath Queries.

バインドすることも、XElementまたはXDocument、またはクエリの LINQ to XML を使用して、これらの型のオブジェクトの実行の結果にバインドします。You can also bind to an XElement or XDocument, or bind to the results of queries run on objects of these types by using LINQ to XML. マークアップでバインド ソースである XML データにアクセスする LINQ to XML を使用する便利な方法を使用して、ObjectDataProviderオブジェクト。A convenient way to use LINQ to XML to access XML data that is the binding source in markup is to use an ObjectDataProvider object. 詳細については、「XDocument、XElement、または LINQ for XML クエリの結果にバインドする」を参照してください。For more information, see Bind to XDocument, XElement, or LINQ for XML Query Results.
DependencyObject オブジェクトDependencyObject objects いずれかの依存関係プロパティにバインドできるDependencyObjectです。You can bind to dependency properties of any DependencyObject. 例については、「2 つのコントロールのプロパティをバインドする」を参照してください。For an example, see Bind the Properties of Two Controls.

バインディング ソースのクラスの実装Implementing a Class for the Binding Source

独自のバインディング ソースを作成できます。You can create your own binding sources. このセクションでは、バインディング ソースとして機能するクラスを実装する場合に認識している必要のある事項について説明します。This section discusses the things you need to know if you are implementing a class to serve as a binding source.

変更通知の提供Providing Change Notifications

いずれかを使用している場合OneWayまたはTwoWayバインド (するので、UIUIバインディング ソース プロパティを動的に変更するときに更新する)、適切なプロパティの変更通知メカニズムを実装する必要があります。If you are using either OneWay or TwoWay binding (because you want your UIUI to update when the binding source properties change dynamically), you must implement a suitable property changed notification mechanism. 推奨される機構をCLRCLRや動的クラスを実装するため、INotifyPropertyChangedインターフェイスです。The recommended mechanism is for the CLRCLR or dynamic class to implement the INotifyPropertyChanged interface. 詳細については、「プロパティの変更通知を実装する」を参照してください。For more information, see Implement Property Change Notification.

作成する場合、CLRCLRを実装しないオブジェクトINotifyPropertyChanged、そのバインディングで使用されるデータが現在のままになることを確認する通知システムを配置する必要があります。If you create a CLRCLR object that does not implement INotifyPropertyChanged, then you must arrange for your own notification system to make sure that the data used in a binding stays current. 変更通知対象にする各プロパティの PropertyChanged パターンをサポートすることによって、変更通知を提供できます。You can provide change notifications by supporting the PropertyChanged pattern for each property that you want change notifications for. このパターンをサポートするには、プロパティごとに PropertyNameChanged イベントを定義します。PropertyName はプロパティの名前です。To support this pattern, you define a PropertyNameChanged event for each property, where PropertyName is the name of the property. プロパティが変更されるたびにイベントが発生します。You raise the event every time the property changes.

バインディング ソースがこれらの通知メカニズムの 1 つを実装する場合、ターゲットの更新が自動的に発生します。If your binding source implements one of these notification mechanisms, target updates happen automatically. 使用するオプションがある場合は、バインディング ソースに適切なプロパティが提供していない何らかの理由で変更通知、UpdateTargetメソッドを対象となるプロパティを明示的に更新します。If for any reason your binding source does not provide the proper property changed notifications, you have the option to use the UpdateTarget method to update the target property explicitly.

その他の特性Other Characteristics

その他の重要な点を次に示します。The following list provides other important points to note:

  • XAMLXAML にオブジェクトを作成する場合、クラスに既定のコンストラクターが必要です。If you want to create the object in XAMLXAML, the class must have a default constructor. 一部の.NET.NETなど、C# の場合は、言語を既定のコンス トラクターがありますが作成されます。In some .NET.NET languages, such as C#, the default constructor might be created for you.

  • バインディングのバインディング ソース プロパティとして使用するプロパティは、クラスのパブリック プロパティである必要があります。The properties you use as binding source properties for a binding must be public properties of your class. 明示的に定義されたインターフェイスのプロパティは、バインディングの目的ではアクセスできません。また、基本実装を持たない保護されたプロパティ、プライベート プロパティ、内部プロパティ、仮想プロパティも同様にバインディングの目的ではアクセスできません。Explicitly defined interface properties cannot be accessed for binding purposes, nor can protected, private, internal, or virtual properties that have no base implementation.

  • パブリック フィールドにバインドすることはできません。You cannot bind to public fields.

  • クラスで宣言されたプロパティの型は、バインディングに渡される型です。The type of the property declared in your class is the type that is passed to the binding. ただし、最終的にバインディングによって使用される型は、バインディング ソース プロパティの型ではなく、バインディング ターゲット プロパティの型によって決まります。However, the type ultimately used by the binding depends on the type of the binding target property, not of the binding source property. 型の違いがある場合は、バインディングにカスタム プロパティを最初に渡す方法を処理するコンバーターを作成する必要があります。If there is a difference in type, you might want to write a converter to handle how your custom property is initially passed to the binding. 詳細については、「IValueConverter」を参照してください。For more information, see IValueConverter.

バインディング ソースとしてオブジェクト全体を使用するUsing Entire Objects as a Binding Source

バインディング ソースとしてオブジェクト全体を使用できます。You can use an entire object as a binding source. バインディング ソースを使用して指定することができます、SourceまたはDataContextプロパティ、空のバインドの宣言を指定:{Binding}です。You can specify a binding source by using the Source or the DataContext property, and then provide a blank binding declaration: {Binding}. これが便利なシナリオには、文字列型のオブジェクトへのバインディング、対象とするプロパティが複数あるオブジェクトへのバインディング、またはコレクション オブジェクトへのバインディングなどがあります。Scenarios in which this is useful include binding to objects that are of type string, binding to objects with multiple properties you are interested in, or binding to collection objects. コレクション オブジェクト全体へのバインディングの例は、「階層データでマスター詳細パターンを使用する」を参照してください。For an example of binding to an entire collection object, see Use the Master-Detail Pattern with Hierarchical Data.

バインディング ターゲット プロパティに対してデータが意味を持つように、カスタム ロジックを適用する必要があることに注意してください。Note that you may need to apply custom logic so that the data is meaningful to your bound target property. カスタム ロジックがカスタムのコンバーターの形式である可能性があります (既定の型変換が存在しない) 場合、またはDataTemplateです。The custom logic may be in the form of a custom converter (if default type conversion does not exist) or a DataTemplate. コンバーターの詳細については、「データ バインディングの概要」の「データ変換」セクションを参照してください。For more information about converters, see the Data Conversion section of Data Binding Overview. データ テンプレートの詳細については「 データ テンプレートの概要」を参照してください。For more information about data templates, see Data Templating Overview.

バインディング ソースとしてコレクション オブジェクトを使用するUsing Collection Objects as a Binding Source

多くの場合、バインディング ソースとして使用するオブジェクトは、カスタム オブジェクトのコレクションです。Often, the object you want to use as the binding source is a collection of custom objects. 各オブジェクトは、反復されるバインディングの 1 つのインスタンスのソースとして機能します。Each object serves as the source for one instance of a repeated binding. たとえば、CustomerOrder オブジェクトから構成される CustomerOrders コレクションがあり、アプリケーションが注文数およびそれぞれに含まれているデータを判別するためにコレクションとやり取りするとします。For example, you might have a CustomerOrders collection that consists of CustomerOrder objects, where your application iterates over the collection to determine how many orders exist and the data contained in each.

実装する任意のコレクションを列挙することができます、IEnumerableインターフェイスです。You can enumerate over any collection that implements the IEnumerable interface. ただし、コレクションの挿入や削除を更新できるように動的なバインドを設定する、UIUIコレクションは、自動的に実装する必要があります、INotifyCollectionChangedインターフェイスです。However, to set up dynamic bindings so that insertions or deletions in the collection update the UIUI automatically, the collection must implement the INotifyCollectionChanged interface. このインターフェイスは、基盤のコレクションが変更されたときに必ず発生する必要があるイベントを公開します。This interface exposes an event that must be raised whenever the underlying collection changes.

ObservableCollection<T>クラスは、組み込みの実装を公開するデータの収集、INotifyCollectionChangedインターフェイスです。The ObservableCollection<T> class is a built-in implementation of a data collection that exposes the INotifyCollectionChanged interface. コレクション内の個々のデータ オブジェクトは、前の各セクションで説明されている要件を満たす必要があります。The individual data objects within the collection must satisfy the requirements described in the preceding sections. 例については、「ObservableCollection を作成およびバインドする」を参照してください。For an example, see Create and Bind to an ObservableCollection. 独自のコレクションを実装する前に、使用を検討してObservableCollection<T>またはなどの既存のコレクションのいずれかのクラスList<T>Collection<T>、およびBindingList<T>、その他の多くの間でします。Before implementing your own collection, consider using ObservableCollection<T> or one of the existing collection classes, such as List<T>, Collection<T>, and BindingList<T>, among many others.

WPF はコレクションに直接バインドすることはありません。WPF never binds directly to a collection. バインディング ソースとしてコレクションを指定すると、WPF は実際にはコレクションの既定のビューにバインドします。If you specify a collection as a binding source, WPF actually binds to the collection's default view. 既定のビューの詳細については、「データ バインディングの概要」を参照してください。For information about default views, see Data Binding Overview.

高度なシナリオがあり、独自のコレクションを実装する場合は、使用を検討して、IListインターフェイスです。If you have an advanced scenario and you want to implement your own collection, consider using the IList interface. IList パフォーマンスを向上させることができます、インデックスによって個別にアクセスできるオブジェクトの非ジェネリック コレクションを提供します。IList provides a non-generic collection of objects that can be individually accessed by index, which can improve performance.

データ バインディングでのアクセス許可要件Permission Requirements in Data Binding

データ バインディング時、アプリケーションの信頼レベルを考慮する必要があります。When data binding, you must consider the trust level of the application. 次の表は、完全信頼または部分信頼で実行しているアプリケーションにおいてバインドできるプロパティの型のまとめです。The following table summarizes what property types can be bound to in an application that is executing in either full trust or partial trust:

プロパティの型Property type

(すべてのアクセス修飾子)(all access modifiers)
動的オブジェクトのプロパティDynamic object property 動的オブジェクトのプロパティDynamic object property CLR プロパティCLR property CLR プロパティCLR property 依存関係プロパティDependency property 依存関係プロパティDependency property
信頼レベルTrust level 完全信頼Full trust 部分信頼Partial trust 完全信頼Full trust 部分信頼Partial trust 完全信頼Full trust 部分信頼Partial trust
パブリック クラスPublic class [はい]Yes はいYes はいYes はいYes はいYes [はい]Yes
非パブリック クラスNon-public class [はい]Yes いいえNo はいYes いいえNo はいYes [はい]Yes

この表では、データ バインディングのアクセス許可要件について次の重要事項を説明します。This table describes the following important points about permission requirements in data binding:

  • CLRCLR プロパティでは、バインディング エンジンが、リフレクションを使用してバインディング ソースのプロパティにアクセスできる限り、データ バインディングは機能します。For CLRCLR properties, data binding works as long as the binding engine is able to access the binding source property using reflection. それ以外の場合、バインディング エンジンは、プロパティを検出できないという警告を発行し、フォールバック値または既定値を使用します (使用できる場合)。Otherwise, the binding engine issues a warning that the property cannot be found and uses the fallback value or the default value, if it is available.

  • コンパイル時または実行時に定義されている動的オブジェクトのプロパティにバインドできます。You can bind to properties on dynamic objects that are defined at compile time or run time.

  • 依存関係プロパティには常にバインドできます。You can always bind to dependency properties.

XMLXML バインディングのアクセス許可要件は同様です。The permission requirement for XMLXML binding is similar. 部分的に信頼されたサンド ボックスでXmlDataProvider指定されたデータにアクセスする権限があるない場合は失敗します。In a partial-trust sandbox, XmlDataProvider fails when it does not have permissions to access the specified data.

匿名型のオブジェクトは内部です。Objects with an anonymous type are internal. 完全信頼で実行されている場合にのみ、匿名型のプロパティにバインドできます。You can bind to properties of anonymous types only when running in full trust. 匿名型の詳細については、「Anonymous Types (C# Programming Guide)」または「Anonymous Types (Visual Basic)」を参照してください。For more information about anonymous types, see Anonymous Types (C# Programming Guide) or Anonymous Types (Visual Basic) (Visual Basic).

部分信頼セキュリティの詳細については、「WPF 部分信頼セキュリティ」を参照してください。For more information about partial-trust security, see WPF Partial Trust Security.

関連項目See Also

ObjectDataProvider
XmlDataProvider
バインディング ソースを指定するSpecify the Binding Source
データ バインディングの概要Data Binding Overview
方法トピックHow-to Topics
LINQ to XML による WPF のデータ バインディングの概要WPF Data Binding with LINQ to XML Overview
データ バインディングData Binding