Dołączone zachowania
Dołączone zachowania to klasy statyczne z co najmniej jedną dołączoną właściwością. W tym artykule przedstawiono sposób tworzenia i korzystania z dołączonych zachowań.
Omówienie
Dołączona właściwość jest specjalnym typem właściwości możliwej do powiązania. Są one definiowane w jednej klasie, ale dołączone do innych obiektów i są rozpoznawalne w języku XAML jako atrybuty zawierające klasę i nazwę właściwości oddzieloną kropką.
Dołączona właściwość może zdefiniować propertyChanged
delegata, który zostanie wykonany, gdy wartość właściwości ulegnie zmianie, na przykład gdy właściwość jest ustawiona na kontrolce. Po wykonaniu propertyChanged
delegata zostanie przekazane odwołanie do kontrolki, na której jest on dołączony, oraz parametry zawierające stare i nowe wartości właściwości. Ten delegat może służyć do dodawania nowych funkcji do kontrolki dołączonej do właściwości, manipulując odwołaniem przekazanym w następujący sposób:
- Delegat
propertyChanged
rzutuje odwołanie do kontrolki, które jest odbierane jakoBindableObject
, do typu kontrolki, który ma na celu ulepszenie zachowania. - Delegat
propertyChanged
modyfikuje właściwości kontrolki, wywołuje metody kontrolki lub rejestruje programy obsługi zdarzeń dla zdarzeń uwidocznionych przez kontrolkę, aby zaimplementować podstawowe funkcje zachowania.
Problem z dołączonymi zachowaniami polega na tym, że są one zdefiniowane w static
klasie z właściwościami i metodami static
. Utrudnia to tworzenie dołączonych zachowań, które mają stan. Ponadto Xamarin.Forms zachowania zastąpiły dołączone zachowania jako preferowane podejście do budowy zachowań. Aby uzyskać więcej informacji na temat Xamarin.Forms zachowań, zobacz Xamarin.Forms Zachowania.
Tworzenie dołączonego zachowania
Przykładowa aplikacja demonstruje NumericValidationBehavior
element , który wyróżnia wartość wprowadzoną przez użytkownika w kontrolce Entry
na czerwono, jeśli nie jest to double
. Zachowanie zostało pokazane w poniższym przykładzie kodu:
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;
}
}
Klasa NumericValidationBehavior
zawiera dołączoną właściwość o nazwie AttachBehavior
getter static
i setter, która kontroluje dodanie lub usunięcie zachowania do kontrolki, do której zostanie dołączony. Ta dołączona właściwość rejestruje metodę OnAttachBehaviorChanged
, która zostanie wykonana po zmianie wartości właściwości. Ta metoda rejestruje lub usuwa procedurę obsługi zdarzeń dla TextChanged
zdarzenia na podstawie wartości dołączonej AttachBehavior
właściwości. Podstawowe funkcje zachowania są udostępniane przez metodę OnEntryTextChanged
, która analizuje wartość wprowadzoną przez Entry
użytkownika i ustawia TextColor
właściwość na czerwoną, jeśli wartość nie jest wartością double
.
Korzystanie z dołączonego zachowania
Klasę NumericValidationBehavior
można użyć przez dodanie dołączonej AttachBehavior
właściwości do Entry
kontrolki, jak pokazano w poniższym przykładzie kodu XAML:
<ContentPage ... xmlns:local="clr-namespace:WorkingWithBehaviors;assembly=WorkingWithBehaviors" ...>
...
<Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="true" />
...
</ContentPage>
Odpowiednik Entry
w języku C# jest pokazany w poniższym przykładzie kodu:
var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, true);
W czasie wykonywania zachowanie będzie reagować na interakcję z kontrolką zgodnie z implementacją zachowania. Na poniższych zrzutach ekranu przedstawiono dołączone zachowanie odpowiadające na nieprawidłowe dane wejściowe:
Uwaga
Dołączone zachowania są zapisywane dla określonego typu kontrolki (lub superklasy, która może mieć zastosowanie do wielu kontrolek) i powinny być dodawane tylko do zgodnej kontrolki. Próba dołączenia zachowania do niezgodnej kontrolki spowoduje nieznane zachowanie i zależy od implementacji zachowania.
Usuwanie dołączonego zachowania z kontrolki
Klasę NumericValidationBehavior
można usunąć z kontrolki, ustawiając dołączoną AttachBehavior
właściwość na false
wartość , jak pokazano w poniższym przykładzie kodu XAML:
<Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="false" />
Odpowiednik Entry
w języku C# jest pokazany w poniższym przykładzie kodu:
var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, false);
W czasie wykonywania metoda zostanie wykonana, OnAttachBehaviorChanged
gdy wartość dołączonej AttachBehavior
właściwości zostanie ustawiona na false
wartość . OnAttachBehaviorChanged
Następnie metoda spowoduje anulowanie rejestracji programu obsługi zdarzeń dla TextChanged
zdarzenia, zapewniając, że zachowanie nie jest wykonywane, gdy użytkownik wchodzi w interakcję z kontrolką.
Podsumowanie
W tym artykule przedstawiono sposób tworzenia i korzystania z dołączonych zachowań. Dołączone zachowania to static
klasy z co najmniej jedną dołączoną właściwością.