BindableObject Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.
public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
interface INotifyPropertyChanged
interface IDynamicResourceHandler
- Dziedziczenie
-
System.ObjectBindableObject
- Pochodne
- Implementuje
-
System.ComponentModel.INotifyPropertyChanged IDynamicResourceHandler
Uwagi
Klasa BindableObject udostępnia mechanizm przechowywania danych, który umożliwia deweloperowi aplikacji synchronizowanie danych między obiektami w odpowiedzi na zmiany, na przykład między modelem widoku i widoku we wzorcu projektu MVVM. Wszystkie elementy wizualne w Xamarin.Forms przestrzeni nazw dziedziczą po BindableObject klasie, dzięki czemu mogą służyć do powiązania danych za elementami interfejsu użytkownika z elementami widoku modeli dostarczanych przez dewelopera aplikacji.
Aby powiązać dane za właściwością w BindableObjectwidoku , zazwyczaj z właściwością w modelu widoku, deweloperzy aplikacji powinni wykonać następujące czynności.
Najpierw deweloper tworzy parę właściwości w widoku, z których jedna jest właściwością BindableProperty, a druga jest właściwością dowolnego typu. W poniższym kodzie oznacza to, MockBindableObject
co zwykle byłoby obiektem interfejsu użytkownika w kodzie produkcyjnym. Deweloperzy aplikacji powinni zwrócić uwagę na użycie SetValue(BindableProperty, Object) właściwości i GetValue(BindableProperty) , aby uzyskać i ustawić wartość dla powiązanej właściwości; Właściwość żądanego typu udostępnia interfejs, który zostanie zaimplementowany przez obiekt docelowy powiązanej właściwości.
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); }
}
}
Po drugie deweloper tworzy implementację właściwości powiązanej w klasie, która implementuje System.ComponentModel.INotifyPropertyChanged interfejs. W wzorcu projektowym MVVM jest to zwykle wykonywane przez model widoku. Deweloperzy aplikacji powinni zaimplementować System.ComponentModel.INotifyPropertyChanged interfejs dla klas, których chcą używać jako modele widoku. W poniższym przykładzie deweloperzy aplikacji powinni zwrócić uwagę na idiomatyczny sposób Name
implementacji właściwości, najpierw upewnij się, że właściwość została rzeczywiście zmieniona i zwrócona, jeśli nie, a następnie przypisać wartość i wywołać metodę OnPropertyChanged(String) . Ponadto właściwość w poniższym przykładzie jedynie Name
zawija name
pole. W praktyce deweloper aplikacji może wybrać inny model, w którym mają być przechowywane dane aplikacji.
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));
}
}
Po trzecie, a na koniec deweloper aplikacji wiąże wystąpienie obiektu BindableObject z wystąpieniem implementujące element INotifyPropertyChanged. W słownictwie wzorca projektu MVVM jest to "powiązanie wystąpienia widoku z wystąpieniem modelu widoku". Po zakończeniu tego kroku zmiany w danych są propagowane między modelem Widok i Widok w sposób określony przez wartość BindingMode wyliczenia, jeśli istnieje, który został przekazany podczas kroku powiązania.
Poniższy kod, jeśli został uwzględniony w projekcie odwołującym się do powyższych klas, tworzy wystąpienie metody MockBindable
i MockViewModel
, wykonuje pewne intitializacja, ustawia powiązanie, a następnie demonstruje powiązanie jednokierunkowe. Poniższy kod jest uruchamiany bez zgłaszania wyjątku.
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 ();
}
Konstruktory
BindableObject() |
Inicjuje nowe wystąpienie klasy BindableObject. |
Pola
BindingContextProperty |
Implementuje właściwość powiązana, której interfejs jest dostarczany przez BindingContext właściwość . |
Właściwości
BindingContext |
Pobiera lub ustawia obiekt zawierający właściwości, które będą objęte powiązanymi właściwościami należącymi do tego BindableObjectobiektu . |
Dispatcher |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |
Metody
ApplyBindings() |
Zastosuj powiązania do BindingContextelementu . |
ClearValue(BindableProperty) |
Czyści dowolną wartość ustawioną przez SetValue dla elementu |
ClearValue(BindablePropertyKey) |
Czyści dowolną wartość ustawioną SetValue przez dla właściwości, która jest identyfikowana przez |
CoerceValue(BindableProperty) |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |
CoerceValue(BindablePropertyKey) |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |
GetValue(BindableProperty) |
Zwraca wartość zawartą w właściwości BindableProperty. |
GetValues(BindableProperty, BindableProperty, BindableProperty) |
Przestarzałe.
Do użytku wewnętrznego przez platformę Xamarin. Forms platformy. |
GetValues(BindableProperty, BindableProperty) |
Przestarzałe.
Do użytku wewnętrznego przez platformę Xamarin. Forms platformy. |
IsSet(BindableProperty) |
Zwraca wartość |
OnBindingContextChanged() |
Zastąpij tę metodę, aby wykonać akcję po zmianie elementu BindingContext. |
OnPropertyChanged(String) |
Wywołaj tę metodę z klasy podrzędnej, aby powiadomić, że zmiana nastąpiła we właściwości. |
OnPropertyChanging(String) |
Wywołaj tę metodę z klasy podrzędnej, aby powiadomić, że w właściwości nastąpi zmiana. |
RemoveBinding(BindableProperty) |
Usuwa wcześniej ustawione powiązanie. |
SetBinding(BindableProperty, BindingBase) |
Przypisuje powiązanie do właściwości. |
SetInheritedBindingContext(BindableObject, Object) |
Ustawia dziedziczony kontekst na zagnieżdżony element. |
SetValue(BindableProperty, Object) |
Ustawia wartość określonej właściwości. |
SetValue(BindablePropertyKey, Object) |
Ustawia wartość właściwościKey. |
SetValueCore(BindableProperty, Object, SetValueFlags) |
Do użytku wewnętrznego przez platformę Xamarin. Forms platformy. |
UnapplyBindings() |
Usuwa wszystkie wcześniej ustawione powiązania. |
Zdarzenia
BindingContextChanged |
Podniesione za każdym razem, BindingContext gdy właściwość ulegnie zmianie. |
PropertyChanged |
Podniesione, gdy właściwość uległa zmianie. |
PropertyChanging |
Podniesione, gdy właściwość ma ulec zmianie. |
Jawne implementacje interfejsu
IDynamicResourceHandler.SetDynamicResource(BindableProperty, String) |
Do użytku wewnętrznego przez platformę Xamarin. Forms platformy. |
Metody rozszerzania
GetPropertyIfSet<T>(BindableObject, BindableProperty, T) |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |
SetAppThemeColor(BindableObject, BindableProperty, Color, Color) |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |
SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String) |
Tworzy i stosuje powiązanie do właściwości. |
SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String) |
Przestarzałe.
Tworzy i stosuje powiązanie z wyrażenia. |
SetOnAppTheme<T>(BindableObject, BindableProperty, T, T) |
Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty. |