BindableObject BindableObject Class

Определение

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий.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
Наследование
BindableObjectBindableObject
Производный
Реализации

Комментарии

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, обычно представления, к свойству в модели "и" application разработчикам должен выполнить следующие представления.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. Кроме того имя свойство в примере ниже просто переносит имя поля.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.

Код ниже, если включить в проект, которые ссылаются на этих классов, создает экземпляр класса оба MockBindable и MockViewModel, выполняет некоторые инициализация, задает привязку, а затем Демонстрирует одностороннюю привязку.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() BindableObject()

Инициализирует новый экземпляр класса BindableObject.Initializes a new instance of the BindableObject class.

Поля

BindingContextProperty BindingContextProperty

Реализует привязанное свойство, интерфейс которого предоставляется свойством BindingContext.Implements the bound property whose interface is provided by the BindingContext property.

Свойства

BindingContext BindingContext

Возвращает или задает объект, содержащий свойства, которые будут являться целевыми для привязанных свойств, относящихся к этому объекту BindableObject.Gets or sets object that contains the properties that will be targeted by the bound properties that belong to this BindableObject.

Методы

ApplyBindings() ApplyBindings()

Применяет привязки к BindingContext.Apply the bindings to BindingContext.

ClearValue(BindableProperty) ClearValue(BindableProperty)

Очищает значение, заданное методом SetValue для property.Clears any value set by SetValue for property.

ClearValue(BindablePropertyKey) ClearValue(BindablePropertyKey)

Очищает значение, заданное методом SetValue для свойства, которое определяется параметром propertyKey.Clears any value set by SetValue for the property that is identified by propertyKey.

GetValue(BindableProperty) GetValue(BindableProperty)

Возвращает значение, которое содержится в BindableProperty.Returns the value that is contained in the BindableProperty.

GetValues(BindableProperty, BindableProperty) GetValues(BindableProperty, BindableProperty)

Для внутреннего использования платформой Xamarin.Forms.For internal use by the Xamarin.Forms platform.

GetValues(BindableProperty, BindableProperty, BindableProperty) GetValues(BindableProperty, BindableProperty, BindableProperty)

Для внутреннего использования платформой Xamarin.Forms.For internal use by the Xamarin.Forms platform.

IsSet(BindableProperty) IsSet(BindableProperty)

Возвращает true, если целевое свойство существует и задано.Returns true if the target property exists and has been set.

OnBindingContextChanged() OnBindingContextChanged()

Переопределите этот метод для выполнения действия при изменении BindingContext.Override this method to execute an action when the BindingContext changes.

OnPropertyChanged(String) OnPropertyChanged(String)

Этот метод можно вызвать из дочернего класса для уведомления об изменении свойства.Call this method from a child class to notify that a change happened on a property.

OnPropertyChanging(String) OnPropertyChanging(String)

Этот метод можно вызвать из дочернего класса для уведомления о том, что свойство будет изменено.Call this method from a child class to notify that a change is going to happen on a property.

RemoveBinding(BindableProperty) RemoveBinding(BindableProperty)

Удаляет заданную ранее привязку.Removes a previously set binding.

SetBinding(BindableProperty, BindingBase) SetBinding(BindableProperty, BindingBase)

Присваивает привязку свойству.Assigns a binding to a property.

SetInheritedBindingContext(BindableObject, Object) SetInheritedBindingContext(BindableObject, Object)

Задает в качестве наследуемого контекста вложенный элемент.Sets the inherited context to a nested element.

SetValue(BindableProperty, Object) SetValue(BindableProperty, Object)

Задает значение указанного свойства.Sets the value of the specified property.

SetValue(BindablePropertyKey, Object) SetValue(BindablePropertyKey, Object)

Задает значение propertyKey.Sets the value of the propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags) SetValueCore(BindableProperty, Object, SetValueFlags)

Для внутреннего использования платформой Xamarin.Forms.For internal use by the Xamarin.Forms platform.

UnapplyBindings() UnapplyBindings()

Отменяет применение всех заданных ранее привязок.Unapplies all previously set bindings.

События

BindingContextChanged BindingContextChanged

Возникает каждый раз, когда свойство BindingContext изменяется.Raised whenever the BindingContext property changes.

PropertyChanged PropertyChanged

Происходит при изменении свойства.Raised when a property has changed.

PropertyChanging PropertyChanging

Происходит, если свойство скоро изменится.Raised when a property is about to change.

Явные реализации интерфейса

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String) IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Для внутреннего использования платформой Xamarin.Forms.For internal use by the Xamarin.Forms platform.

Extension Methods

SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String) 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) SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String)

Создает и применяет привязку из выражения.Creates and applies a binding from an expression.

Применяется к