BindableObject 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过启用验证、类型强制转换和事件系统,提供一种机制,应用程序开发者可以通过该机制将对一个对象中的数据所做的更改传播到另一个对象。 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 枚举值(如果有)确定的方式在视图模型和视图模型之间传播。
下面的代码包含在引用上述类的项目中时,会创建 和 MockViewModel
的MockBindable
实例,执行一些初始化,设置绑定,然后演示单向绑定。 下面的代码在不引发异常的情况下运行。
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. |
方法
事件
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. |