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:
- Delegát
propertyChanged
přetypuje odkaz na ovládací prvek, který je přijat jako aBindableObject
, na typ ovládacího prvku, který chování je určeno k vylepšení. - 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:
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.