BindableObject Класс

Определение

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
Наследование
BindableObject
Производный
Реализации

Комментарии

Класс BindableObject предоставляет механизм хранения данных, который позволяет разработчику приложения синхронизировать данные между объектами в ответ на изменения, например между представлением и моделью представления в шаблоне проектирования MVVM. Все визуальные элементы в Xamarin.Forms пространстве имен наследуются от BindableObject класса , поэтому их можно использовать для привязки данных за элементами пользовательского интерфейса к моделям представления, предоставленным разработчиком приложения.

Чтобы привязать данные за свойством BindableObjectв ( обычно это представление) к свойству в модели представления, разработчики приложений должны выполнить следующие действия.

Сначала разработчик создает в представлении пару свойств, одно из которых является свойством BindableProperty, а другое — свойством любого требуемого типа. В приведенном ниже коде обозначает то, MockBindableObject что обычно является объектом пользовательского интерфейса в рабочем коде. Разработчики приложений должны отметить использование SetValue(BindableProperty, Object) и GetValue(BindableProperty) для получения и задания значения в привязанном свойстве; Свойство требуемого типа предоставляет интерфейс, который будет реализован целевым объектом привязанного свойства.

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 интерфейс . В шаблоне проектирования MVVM это обычно делается моделью представления. Разработчики приложений INotifyPropertyChanged должны реализовать интерфейс в классах, которые они хотят использовать в качестве моделей представления. В приведенном ниже примере разработчики приложений должны принять к сведению идиоматический способ Name реализации свойства, во-первых, убедитесь, что свойство действительно изменилось, и возвращайте его, если это не так, а затем назначьте значение и вызовите OnPropertyChanged(String) метод . Кроме того, Name свойство в приведенном ниже примере просто заключает поле в оболочку name . На практике разработчик приложения может выбрать другую модель для хранения данных приложения.

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. В словаре шаблона проектирования MVVM это "привязка экземпляра представления к экземпляру модели представления". После завершения этого шага изменения в данных распространяются между представлением и моделью представления способом, который определяется значением BindingMode перечисления , если таковое имеется, которое было передано на шаге привязки.

Приведенный ниже код, включенный в проект, который ссылается на указанные выше классы, создает экземпляры и MockBindableMockViewModel, выполняет некоторую инициализацию, задает привязку, а затем демонстрирует односторонние привязки. Приведенный ниже код выполняется без вызова исключения.

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.

Поля

BindingContextProperty

Реализует привязанное свойство, интерфейс которого предоставляется свойством BindingContext.

Свойства

BindingContext

Возвращает или задает объект, содержащий свойства, которые будут являться целевыми для привязанных свойств, относящихся к этому объекту BindableObject.

Dispatcher

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

Методы

ApplyBindings()

Применяет привязки к BindingContext.

ClearValue(BindableProperty)

Очищает значение, заданное методом SetValue для property.

ClearValue(BindablePropertyKey)

Очищает значение, заданное методом SetValue для свойства, которое определяется параметром propertyKey.

CoerceValue(BindableProperty)

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

CoerceValue(BindablePropertyKey)

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

GetValue(BindableProperty)

Возвращает значение, которое содержится в BindableProperty.

GetValues(BindableProperty, BindableProperty)
Является устаревшей.

Для внутреннего использования платформой Xamarin.Forms.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Является устаревшей.

Для внутреннего использования платформой Xamarin.Forms.

IsSet(BindableProperty)

Возвращает true, если целевое свойство существует и задано.

OnBindingContextChanged()

Переопределите этот метод для выполнения действия при изменении BindingContext.

OnPropertyChanged(String)

Этот метод можно вызвать из дочернего класса для уведомления об изменении свойства.

OnPropertyChanging(String)

Этот метод можно вызвать из дочернего класса для уведомления о том, что свойство будет изменено.

RemoveBinding(BindableProperty)

Удаляет заданную ранее привязку.

SetBinding(BindableProperty, BindingBase)

Присваивает привязку свойству.

SetInheritedBindingContext(BindableObject, Object)

Задает в качестве наследуемого контекста вложенный элемент.

SetValue(BindableProperty, Object)

Задает значение указанного свойства.

SetValue(BindablePropertyKey, Object)

Задает значение propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Для внутреннего использования платформой Xamarin.Forms.

UnapplyBindings()

Отменяет применение всех заданных ранее привязок.

События

BindingContextChanged

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

PropertyChanged

Происходит при изменении свойства.

PropertyChanging

Происходит, если свойство скоро изменится.

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

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Для внутреннего использования платформой Xamarin.Forms.

Методы расширения

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

SetAppThemeColor(BindableObject, BindableProperty, Color, Color)

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

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

Создает и применяет привязку к свойству.

SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String)
Является устаревшей.

Создает и применяет привязку из выражения.

SetOnAppTheme<T>(BindableObject, BindableProperty, T, T)

Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.

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