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