BindableObject Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty.
public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
interface INotifyPropertyChanged
interface IDynamicResourceHandler
- Наследование
-
System.ObjectBindableObject
- Производный
- Реализации
-
System.ComponentModel.INotifyPropertyChanged IDynamicResourceHandler
Комментарии
Класс 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); }
}
}
Во-вторых, разработчик создает реализацию для привязанного свойства в классе, который реализует System.ComponentModel.INotifyPropertyChanged интерфейс . В шаблоне проектирования MVVM это обычно делается моделью представления. Разработчики приложений System.ComponentModel.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 перечисления , если таковое имеется, которое было передано на шаге привязки.
Приведенный ниже код, включенный в проект, который ссылается на указанные выше классы, создает экземпляры и MockBindable
MockViewModel
, выполняет некоторую инициализацию, задает привязку, а затем демонстрирует односторонние привязки. Приведенный ниже код выполняется без вызова исключения.
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 для |
ClearValue(BindablePropertyKey) |
Очищает значение, заданное методом SetValue для свойства, которое определяется параметром |
CoerceValue(BindableProperty) |
Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty. |
CoerceValue(BindablePropertyKey) |
Предоставляет механизм, с помощью которого разработчики приложений могут распространять изменения, вносимые в данные в одном объекте, на другой объект, применяя проверку, приведение типов и систему событий. BindableProperty. |
GetValue(BindableProperty) |
Возвращает значение, которое содержится в BindableProperty. |
GetValues(BindableProperty, BindableProperty, BindableProperty) |
Устаревшие..
Для внутреннего использования платформой Xamarin.Forms. |
GetValues(BindableProperty, BindableProperty) |
Устаревшие..
Для внутреннего использования платформой Xamarin.Forms. |
IsSet(BindableProperty) |
Возвращает |
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. |