Sdílet prostřednictvím


BindableObject Třída

Definice

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
Dědičnost
System.Object
BindableObject
Odvozené
Implementuje
System.ComponentModel.INotifyPropertyChanged IDynamicResourceHandler

Poznámky

Třída BindableObject poskytuje mechanismus ukládání dat, který umožňuje vývojáři aplikace synchronizovat data mezi objekty v reakci na změny, například mezi zobrazením a modelem zobrazení v modelu návrhu MVVM. Všechny vizuální prvky v Xamarin.Forms oboru názvů dědí z BindableObject třídy, takže je možné je použít k vytvoření vazby dat za jejich prvky uživatelského rozhraní s modely zobrazení, které poskytuje vývojář aplikace.

Pokud chcete vytvořit vazbu dat za vlastností v BindableObjectzobrazení , obvykle zobrazení, s vlastností v modelu zobrazení, vývojáři aplikací by měli provést následující kroky.

Nejprve vývojář vytvoří v zobrazení dvojici vlastností, z nichž jedna je BindablePropertya druhá je vlastnost libovolného typu. V následujícím kódu je zkratka pro to, MockBindableObject co by obvykle bylo objektem uživatelského rozhraní v produkčním kódu. Vývojáři aplikací by si měli všimnout použití SetValue(BindableProperty, Object) a GetValue(BindableProperty) k získání a nastavení hodnoty v vázané vlastnosti. Vlastnost požadovaného typu poskytuje rozhraní, které cíl vázané vlastnosti bude implementovat.

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); }
    }
}

Za druhé, vývojář vytvoří implementaci pro vázanou vlastnost ve třídě, která implementuje System.ComponentModel.INotifyPropertyChanged rozhraní. Ve vzoru návrhu MVVM to obvykle provádí Model zobrazení. Vývojáři aplikací by měli implementovat System.ComponentModel.INotifyPropertyChanged rozhraní pro třídy, které chtějí používat jako modely zobrazení. V následujícím příkladu by si vývojáři aplikací měli všimnout idiomatického způsobu, do kterého Name je vlastnost implementována. Nejprve by se měli ujistit, že se vlastnost skutečně změnila, a vrátit ji, pokud ne, a teprve potom přiřadit hodnotu a volat metodu OnPropertyChanged(String) . Kromě toho Name vlastnost v následujícím příkladu pouze zabalí name pole. V praxi může vývojář aplikace zvolit jiný model, ve kterém se budou ukládat data aplikací.

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));
    }
}

Za třetí a nakonec vývojář aplikace vytvoří vazbu instance BindableObject na instanci, která implementuje INotifyPropertyChanged. Ve slovníku návrhového vzoru MVVM se jedná o "vytvoření vazby instance zobrazení na instanci modelu zobrazení". Po dokončení tohoto kroku se změny v datech šíří mezi zobrazením a modelem zobrazení způsobem, který je určen hodnotou výčtu BindingMode , pokud existuje, která byla předána během kroku vazby.

Níže uvedený kód, pokud je zahrnut do projektu, který odkazuje na výše uvedené třídy, vytvoří instanci obou MockBindable a MockViewModel, provede určitou inticializaci, nastaví vazbu a pak demonstruje jednosměrnou vazbu. Následující kód se spustí bez vyvolání výjimky.

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()

Inicializuje novou instanci BindableObject třídy.

Pole

BindingContextProperty

Implementuje vázanou vlastnost, jejíž rozhraní poskytuje BindingContext vlastnost.

Vlastnosti

BindingContext

Získá nebo nastaví objekt, který obsahuje vlastnosti, které budou cílem vázané vlastnosti, které patří k tomuto BindableObject.

Dispatcher

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

Metody

ApplyBindings()

Použijte vazby na BindingContext.

ClearValue(BindableProperty)

Vymaže libovolnou hodnotu nastavenou SetValue pro property.

ClearValue(BindablePropertyKey)

Vymaže všechny hodnoty nastavené podle SetValue pro vlastnost, která je identifikovaná pomocí propertyKey.

CoerceValue(BindableProperty)

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

CoerceValue(BindablePropertyKey)

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

GetValue(BindableProperty)

Vrátí hodnotu, která je obsažena v BindableProperty.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Zastaralé.

Pro interní použití v Xamarinu. Forms platformu.

GetValues(BindableProperty, BindableProperty)
Zastaralé.

Pro interní použití v Xamarinu. Forms platformu.

IsSet(BindableProperty)

Vrátí true , pokud vlastnost target existuje a byla nastavena.

OnBindingContextChanged()

Přepsat tuto metodu provést akci při BindingContext změny.

OnPropertyChanged(String)

Voláním této metody z podřízené třídy upozorněte, že došlo ke změně vlastnosti.

OnPropertyChanging(String)

Voláním této metody z podřízené třídy oznámíte, že u vlastnosti dojde ke změně.

RemoveBinding(BindableProperty)

Odebere dříve nastavenou vazbu.

SetBinding(BindableProperty, BindingBase)

Přiřadí vazbu k vlastnosti.

SetInheritedBindingContext(BindableObject, Object)

Nastaví zděděný kontext na vnořený prvek.

SetValue(BindableProperty, Object)

Nastaví hodnotu zadané vlastnosti.

SetValue(BindablePropertyKey, Object)

Nastaví hodnotu propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Pro interní použití v Xamarinu. Forms platformu.

UnapplyBindings()

Zruší použití všech dříve nastavených vazeb.

Událost

BindingContextChanged

Vyvolá se při každé BindingContext změně vlastnosti.

PropertyChanged

Vyvolána při změně vlastnosti.

PropertyChanging

Vyvolána, když se má změnit vlastnost.

Explicitní implementace rozhraní

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Pro interní použití v Xamarinu. Forms platformu.

Metody rozšíření

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

SetAppThemeColor(BindableObject, BindableProperty, Color, Color)

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

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

Vytvoří a použije vazbu na vlastnost.

SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String)
Zastaralé.

Vytvoří a použije vazbu z výrazu.

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

Poskytuje mechanismus, pomocí kterého můžou vývojáři aplikací šířit změny provedené v datech v jednom objektu do jiného povolením ověřování, převodu typů a systému událostí. BindableProperty.

Platí pro