Sdílet prostřednictvím


Připojená chování

Připojené chování jsou statické třídy s jednou nebo více připojenými vlastnostmi. Tento článek ukazuje, jak vytvořit a využívat připojené chování.

Přehled

Připojená vlastnost je speciální typ bindable vlastnosti. Jsou definovány v jedné třídě, ale připojeny k jiným objektům, a jsou rozpoznatelné v XAML jako atributy, které obsahují třídu a název vlastnosti oddělené tečkou.

Připojená vlastnost může definovat propertyChanged delegáta, který se spustí při změně hodnoty vlastnosti, například když je vlastnost nastavena na ovládacím prvku. Když se propertyChanged delegát spustí, předá se odkaz na ovládací prvek, ke kterému je připojen, a parametry, které obsahují staré a nové hodnoty vlastnosti. Tento delegát se dá použít k přidání nových funkcí do ovládacího prvku, ke kterému je vlastnost připojena, pomocí manipulace s odkazem, který je předán, následujícím způsobem:

  1. Delegát propertyChanged přetypuje odkaz na ovládací prvek, který je přijat jako a BindableObject, na typ ovládacího prvku, který chování je určeno k vylepšení.
  2. Delegát propertyChanged upravuje vlastnosti ovládacího prvku, volá metody ovládacího prvku nebo registruje obslužné rutiny událostí pro události vystavené ovládacím prvku, aby implementovaly základní funkce chování.

Problém s připojeným chováním spočívá v tom, že jsou definovány ve static třídě s vlastnostmi a metodami static . To znesnadňuje vytváření připojených chování, která mají stav. Kromě toho Xamarin.Forms chování nahradilo připojené chování jako upřednostňovaný přístup ke konstrukci chování. Další informace o Xamarin.Forms chování naleznete v tématu Xamarin.Forms Chování.

Vytvoření připojeného chování

Ukázková aplikace ukazuje NumericValidationBehavior, který zvýrazní hodnotu zadaná uživatelem Entry do ovládacího prvku červeně, pokud není double. Chování je znázorněno v následujícím příkladu kódu:

public static class NumericValidationBehavior
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached (
            "AttachBehavior",
            typeof(bool),
            typeof(NumericValidationBehavior),
            false,
            propertyChanged:OnAttachBehaviorChanged);

    public static bool GetAttachBehavior (BindableObject view)
    {
        return (bool)view.GetValue (AttachBehaviorProperty);
    }

    public static void SetAttachBehavior (BindableObject view, bool value)
    {
        view.SetValue (AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged (BindableObject view, object oldValue, object newValue)
    {
        var entry = view as Entry;
        if (entry == null) {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior) {
            entry.TextChanged += OnEntryTextChanged;
        } else {
            entry.TextChanged -= OnEntryTextChanged;
        }
    }

    static void OnEntryTextChanged (object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse (args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
    }
}

Třída NumericValidationBehavior obsahuje připojenou vlastnost s static názvem AttachBehavior getter a setter, která řídí přidání nebo odebrání chování ovládacího prvku, ke kterému bude připojen. Tato připojená vlastnost registruje metodu OnAttachBehaviorChanged , která se spustí při změně hodnoty vlastnosti. Tato metoda zaregistruje nebo zruší registraci obslužné rutiny události pro TextChanged událost na základě hodnoty AttachBehavior připojené vlastnosti. Základní funkce chování je poskytována OnEntryTextChanged metodou, která parsuje hodnotu zadanou Entry uživatelem a nastaví TextColor vlastnost na červenou, pokud hodnota není double.

Využívání připojeného chování

Třídu NumericValidationBehavior lze využívat přidáním AttachBehavior připojené vlastnosti do Entry ovládacího prvku, jak je znázorněno v následujícím příkladu kódu XAML:

<ContentPage ... xmlns:local="clr-namespace:WorkingWithBehaviors;assembly=WorkingWithBehaviors" ...>
    ...
    <Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="true" />
    ...
</ContentPage>

Ekvivalent Entry v jazyce C# je znázorněn v následujícím příkladu kódu:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, true);

Za běhu bude chování reagovat na interakci s ovládacím prvku podle implementace chování. Následující snímky obrazovky ukazují chování připojeného chování reagující na neplatný vstup:

Ukázková aplikace s připojeným chováním

Poznámka:

Připojená chování se zapisují pro určitý typ ovládacího prvku (nebo pro nadtřídu, která se může použít u mnoha ovládacích prvků) a měly by být přidány pouze do kompatibilního ovládacího prvku. Pokus o připojení chování k nekompatibilnímu ovládacímu prvku způsobí neznámé chování a závisí na implementaci chování.

Odebrání připojeného chování z ovládacího prvku

Třídu NumericValidationBehavior lze z ovládacího prvku odebrat nastavením AttachBehavior připojené vlastnosti na false, jak je znázorněno v následujícím příkladu kódu XAML:

<Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="false" />

Ekvivalent Entry v jazyce C# je znázorněn v následujícím příkladu kódu:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, false);

Za běhu OnAttachBehaviorChanged se metoda spustí, když je hodnota AttachBehavior připojené vlastnosti nastavena na false. Metoda OnAttachBehaviorChanged pak zruší registraci obslužné rutiny události pro TextChanged událost a zajistí, aby chování nebylo provedeno při interakci uživatele s ovládacím prvku.

Shrnutí

Tento článek ukazuje, jak vytvořit a využívat připojené chování. Připojené chování jsou static třídy s jednou nebo více připojenými vlastnostmi.