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. BindableProperty.BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
상속
BindableObject
파생
구현

설명

클래스 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.

먼저 개발자는 뷰에 속성 쌍을 만듭니다. 그 중 하나는이 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),
                                  default(string));
    
    // 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. 아래 예제에서 응용 프로그램 개발자는 이름 속성이 구현 되는 자연 스러운 방법을 먼저 확인 하 고, 먼저 속성이 실제로 변경 되었는지 확인 하 고, 그렇지 않은 경우를 반환 하 고, 값을 할당 하 고 메서드를 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; }
        set
        {
            // OnPropertyChanged should not be called if the property value
            // does not change.
            if (name == value)
                return;
            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의 인스턴스를 만들고, 일부 intitialization를 수행 하 고, 바인딩을 설정 하 고, 단방향 바인딩을 보여 줍니다.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. 아래 코드는 예외를 throw 하지 않고 실행 됩니다.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()

BindableObject 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the BindableObject class.

필드

BindingContextProperty

해당 인터페이스가 BindingContext 속성에서 제공된 바인딩된 속성을 구현합니다.Implements the bound property whose interface is provided by the BindingContext property.

속성

BindingContext

BindableObject에 속하는 바인딩된 속성에 의해 대상으로 지정될 속성을 포함하는 개체를 가져오거나 설정합니다.Gets or sets object that contains the properties that will be targeted by the bound properties that belong to this BindableObject.

메서드

ApplyBindings()

바인딩을 BindingContext에 적용합니다.Apply the bindings to BindingContext.

ClearValue(BindableProperty)

property에 대해 SetValue로 설정된 모든 값을 지웁니다.Clears any value set by SetValue for property.

ClearValue(BindablePropertyKey)

propertyKey로 식별되는 속성에 대해 SetValue로 설정된 모든 값을 지웁니다.Clears any value set by SetValue for the property that is identified by propertyKey.

GetValue(BindableProperty)

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.

IsSet(BindableProperty)

대상 속성이 있고 설정된 경우 true를 반환합니다.Returns true if the target property exists and has been set.

OnBindingContextChanged()

BindingContext가 변경될 때 작업을 실행하려면 이 메서드를 재정의합니다.Override this method to execute an action when the BindingContext changes.

OnPropertyChanged(String)

자식 클래스에서 이 메서드를 호출하여 속성이 변경되었음을 알립니다.Call this method from a child class to notify that a change happened on a property.

OnPropertyChanging(String)

자식 클래스에서 이 메서드를 호출하여 속성이 변경되었음을 알립니다.Call this method from a child class to notify that a change is going to happen on a property.

RemoveBinding(BindableProperty)

이전 바인딩 설정을 제거합니다.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.

UnapplyBindings()

이전 모든 바인딩 설정을 적용 해제합니다.Unapplies all previously set bindings.

이벤트

BindingContextChanged

BindingContext 속성이 변경될 때마다 발생됩니다.Raised whenever the BindingContext property changes.

PropertyChanged

속성이 변경된 경우 발생됩니다.Raised when a property has changed.

PropertyChanging

속성이 변경되려고 할 때 발생됩니다.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.

적용 대상