BindableObject クラス


アプリケーション開発者が検証、強制型変換、イベント システムを有効にすることで、あるオブジェクトのデータに対する変更を別のオブジェクトに適用できるメカニズムを提供します。Provides a mechanism by which application developers can propagate changes that are made to data in one object to another, by enabling validation, type coercion, and an event system. BindablePropertyBindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler


BindableObject クラスは、MVVM デザインパターンのビューモデルとビューモデルの間で、アプリケーション開発者が変更に応じてオブジェクト間でデータを同期できるようにするデータストレージメカニズムを提供します。The BindableObject class provides a data storage mechanism that enables the application developer to synchronize data between objects in response to changes, for example, between the View and View Model in the MVVM design pattern. Xamarin.Forms 名前空間のすべてのビジュアル要素は BindableObject クラスから継承されるため、ユーザーインターフェイス要素の背後にあるデータをバインドして、アプリケーション開発者によって提供されるモデルを表示できます。All of the visual elements in the Xamarin.Forms namespace inherit from BindableObject class, so they can all be used to bind the data behind their user interface elements to View Models that are supplied by the application developer.

BindableObjectのプロパティの背後にあるデータをビューモデルのプロパティにバインドするには、アプリケーション開発者は次の操作を行う必要があります。To bind the data behind a property in a BindableObject, typically a view, to a property in the View Model, application developers should do the following.

最初に、開発者はビューに一連のプロパティを作成します。そのうちの1つは BindablePropertyで、もう一方は任意の型のプロパティです。First, the developer creates a pair of properties on the view, one of which is a BindableProperty, and the other of which is a property of whatever type is required. 次のコードでは、 MockBindableObjectは、通常、運用環境のコードでユーザーインターフェイスオブジェクトとなるものを表します。In the code below, MockBindableObject stands in for what would typically be a user interface object in production code. アプリケーション開発者は、バインドされたプロパティの値を取得して設定するために、SetValue(BindableProperty, Object)GetValue(BindableProperty) の使用に注意する必要があります。目的の型のプロパティは、バインドされたプロパティのターゲットが実装するインターフェイスを提供します。Application developers should note the use of SetValue(BindableProperty, Object) and GetValue(BindableProperty) to get and set the value on the bound property; The property of the desired type provides the interface that the target of the bound property will implement.

class MockBindableObject : BindableObject
    // App developers should use the method below in production code for 
    // better performance
    public static readonly BindableProperty BoundNameProperty =
         BindableProperty.Create ("Foo", typeof (string),
                                  typeof (MockBindableObject),
    // App developers should use the method below during development for
    // design-time error checking as the codebase evolves.
    // public static readonly BindableProperty FooProperty 
    //     = BindableProperty.Create<MockBindableObject, string> (
    //         o => o.Foo, default (string)
    //     );
    public string BoundName
        get { return (string) GetValue (BoundNameProperty); }
        set { SetValue (BoundNameProperty, value); }

次に、開発者は、INotifyPropertyChanged インターフェイスを実装するクラスに、バインドされたプロパティの実装を作成します。Second, the developer creates the implementation for the bound property in a class that implements the INotifyPropertyChanged interface. MVVM デザインパターンでは、これは通常、ビューモデルによって行われます。In the MVVM design pattern, this is typically done by the View Model. アプリケーション開発者は、ビューモデルとして使用するクラスに INotifyPropertyChanged インターフェイスを実装する必要があります。Application developers should implement the INotifyPropertyChanged interface on classes that they want to use as View Models. 次の例では、アプリ開発者は、 Nameプロパティが実装されている慣用的な方法をメモし、プロパティが実際に変更されていないかどうかを確認してから、それ以外の場合はを返します。その後、値を割り当てて OnPropertyChanged(String) メソッドを呼び出します。In the example below, app developers should take note of the idiomatic way that the Name property is implemented to, first, ensure that the property actually changed and return if it did not, and only then assign the value and call the OnPropertyChanged(String) method. また、次の例のnameプロパティは、単にnameフィールドをラップしています。Additionally, the Name property in the example below merely wraps the name field. 実際には、アプリケーション開発者は、アプリケーションデータを格納する別のモデルを選択できます。In practice, the application developer may choose a different model in which to store application data.

class MockViewModel : INotifyPropertyChanged
    string name;
    public string Name
        get { return name; }
            // OnPropertyChanged should not be called if the property value
            // does not change.
            if (name == value)
            name = value;
            OnPropertyChanged ();
    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged (string propertyName = null)
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler (this, new PropertyChangedEventArgs (propertyName));

最後に、アプリケーション開発者は、BindableObject のインスタンスを INotifyPropertyChanged を実装するインスタンスにバインドします。Third, and finally, the application developer binds an instance of a BindableObject to an instance that implements INotifyPropertyChanged. MVVM デザインパターンの語彙では、これは "ビューのインスタンスをビューモデルのインスタンスにバインドする" です。In the vocabulary of the MVVM design pattern, this is "binding an instance of the View to an instance of a View Model." この手順が完了すると、データの変更が、バインドの手順で渡された BindingMode 列挙型の値によって決定される方法で、ビューモデルとビューモデルの間で反映されます。Once this step is complete, changes in the data are propagated between the View and View Model in a way that is determined by the value of the BindingMode enumeration, if any, that was passed during the binding step.

次のコードは、上記のクラスを参照するプロジェクトに含まれている場合、 MockBindableMockViewModelの両方のインスタンスを作成し、何らかの処理を実行し、バインディングを設定して、一方向のバインドを示します。The code below, when included in a project that reference the classes above, creates an instance of both MockBindable and MockViewModel, performs some intitialization, sets the binding, and then demonstrates a one-way binding. 次のコードは、例外をスローすることなく実行されます。The code below runs without throwing an exception.

public static void OneWayDemo ()
    var view = new MockBindableObject ();
    var viewModel = new MockViewModel ();
    // Pre-load the ViewModel, for demonstration purposes
    viewModel.Name = "Testing";
    // Create a one-way (default) binding
    view.SetBinding (MockBindableObject.BoundNameProperty, new Binding ("Name"));
    // App developers should only set the binding context after all
    // calls to SetBinding() have been made, for performance reasons.
    view.BindingContext = viewModel;
    // In a one way binding, the ViewModel value will be used to update
    // the values in the View during initialization
    if (view.BoundName != "Testing")
        throw new Exception ();
    view.BoundName = "gnitseT";
    // in a one way binding, changes to the View will NOT update the ViewModel
    if (viewModel.Name == "gnitseT")
        throw new Exception ();



BindableObject クラスの新しいインスタンスを初期化します。Initializes a new instance of the BindableObject class.



バインドされたプロパティのうち、インターフェイスが BindingContext プロパティによって提供されるプロパティを実装します。Implements the bound property whose interface is provided by the BindingContext property.



バインドされたプロパティのうち、この BindableObject に属するプロパティの対象となるプロパティが含まれるオブジェクトを取得または設定します。Gets or sets object that contains the properties that will be targeted by the bound properties that belong to this BindableObject.



BindingContext にバインディングを適用します。Apply the bindings to BindingContext.


propertySetValue によって設定された値を消去します。Clears any value set by SetValue for property.


propertyKey によって識別されるプロパティの SetValue によって設定される値を消去します。Clears any value set by SetValue for the property that is identified by propertyKey.


BindableProperty に含まれる値を返します。Returns the value that is contained in the BindableProperty.

GetValues(BindableProperty, BindableProperty)

Xamarin.Forms プラットフォームによる内部使用向け。For internal use by the Xamarin.Forms platform.

GetValues(BindableProperty, BindableProperty, BindableProperty)

Xamarin.Forms プラットフォームによる内部使用向け。For internal use by the Xamarin.Forms platform.


ターゲット プロパティが存在し、設定されている場合、true を返します。Returns true if the target property exists and has been set.


このメソッドをオーバーライドし、BindingContext が変更されたときにアクションを実行します。Override this method to execute an action when the BindingContext changes.


子クラスからこのメソッドを呼び出し、プロパティが変更されたことを通知します。Call this method from a child class to notify that a change happened on a property.


子クラスからこのメソッドを呼び出し、プロパティで変更が行われることを通知します。Call this method from a child class to notify that a change is going to happen on a property.


以前に設定されたバインディングを削除します。Removes a previously set binding.

SetBinding(BindableProperty, BindingBase)

プロパティにバインディングを割り当てます。Assigns a binding to a property.

SetInheritedBindingContext(BindableObject, Object)

継承されたコンテキストを入れ子になった要素に設定します。Sets the inherited context to a nested element.

SetValue(BindableProperty, Object)

指定したプロパティの値を設定します。Sets the value of the specified property.

SetValue(BindablePropertyKey, Object)

propertyKey の値を設定します。Sets the value of the propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Xamarin.Forms プラットフォームによる内部使用向け。For internal use by the Xamarin.Forms platform.


以前に設定されたバインディングをすべて解除します。Unapplies all previously set bindings.



BindingContext プロパティが変更されるたびに発生します。Raised whenever the BindingContext property changes.


プロパティが変更されたときに発生します。Raised when a property has changed.


プロパティが変更されようとしているときに発生します。Raised when a property is about to change.


IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Xamarin.Forms プラットフォームによる内部使用向け。For internal use by the Xamarin.Forms platform.


SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String)

プロパティにバインドを作成し、適用します。Creates and applies a binding to a property.

SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String)

式からバインドを作成し適用します。Creates and applies a binding from an expression.