Xamarin.Forms Bağlanabilir Özellikler
Bağlanabilir Özellikler bir özelliği bir BindableProperty alanla birlikte yedeklemek yerine, bir özelliği bir tür ile YEDEKLEYEREK CLR özellik işlevselliğini genişletir. Bağlanabilir özelliklerin amacı, üst-alt ilişkileri aracılığıyla ayarlanan veri bağlamayı, stilleri, şablonları ve değerleri destekleyen bir özellik sistemi sağlamaktır. Ayrıca, bağlanabilir özellikler varsayılan değerleri, özellik değerlerinin doğrulanmasını ve özellik değişikliklerini izleyen geri çağırmaları sağlayabilir.
Özellikler, aşağıdaki özelliklerden birini veya daha fazlasını desteklemek için bağlanabilir özellikler olarak uygulanmalıdır:
- Veri bağlama için geçerli bir hedef Özellik görevi gören.
- Özelliği bir Stilaracılığıyla ayarlama.
- Özelliğin türü için varsayılan değerden farklı olan varsayılan bir özellik değeri sağlama.
- Özelliğin değeri doğrulanıyor.
- Özellik değişiklikleri izleniyor.
Xamarin.FormsBağlanabilir özelliklere örnek olarak Xamarin.Forms , Xamarin_Forms _Label_Text "Data-LinkType =" Absolute-path ">Label.Text , Xamarin_Forms _Button_BorderRadius" Data-linktype = "absolute-path" >Button.BorderRadius ve Xamarin_Forms Label.Text _StackLayout_Orientation "Data-LinkType =" Absolute-path ">sayılabilir StackLayout.Orientation . Her bağlanabilir özelliğin, public static readonlyBindableProperty aynı sınıfta sunulan ve bağlanabilir özelliğin tanımlayıcısı olan, karşılık gelen türde bir alanı vardır. Örneğin, özelliği için ilgili bağlanabilir özellik tanımlayıcısı Label.TextLabel.TextProperty .
Bağlanabilir Özellik oluşturma
Bağlanabilir bir özellik oluşturma işlemi aşağıdaki gibidir:
BindablePropertyYöntem aşırı yüklerini içeren bir örnek oluşturunBindableProperty.Create.- Örnek için özellik erişimcileri tanımlayın
BindableProperty.
Tüm BindableProperty örneklerin Kullanıcı arabirimi iş parçacığında oluşturulması gerekir. Bu, yalnızca UI iş parçacığında çalışan kodun bağlanabilir bir özelliğin değerini alabileceği veya ayarlayabileceği anlamına gelir. Ancak, BindableProperty Xamarin_Forms BindableProperty _Device_BeginInvokeOnMainThread_System_Action_ "Data-LinkType =" Absolute-path ">yöntemi ile UI iş parçacığına sıralama yaparak diğer iş parçacıklarından örneklere erişilebilir Device.BeginInvokeOnMainThread .
Özellik Oluştur
Bir örnek oluşturmak için BindableProperty , kapsayan sınıfın sınıfından türetilmesi gerekir BindableObject . Ancak sınıfı, BindableObject sınıf hiyerarşisinde yüksek olduğundan, Kullanıcı arabirimi işlevselliği için kullanılan sınıfların çoğunluğu bağlanabilir özellikleri destekler.
Türünde bir özellik bildirerek bağlanabilir bir özellik oluşturulabilir public static readonlyBindableProperty . Bağlanabilir özellik, Xamarin_Forms _BindableProperty_Create_System_String_System_Type_System_Type_System_Object_ Xamarin_Forms _bindingmode_ Xamarin_Forms _BindableProperty_ValidateValueDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangedDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangingDelegate_ Xamarin_Forms _BindableProperty_CoerceValueDelegate_ _BindableProperty_CreateDefaultValueDelegate_ Xamarin_Forms "Data-LinkType =" olarak döndürülen değeri olarak ayarlanmalıdır mutlak yol ">BindableProperty.Create yöntemi aşırı yüklemeleri. Bildirim BindableObject türetilmiş sınıfın gövdesinde, ancak herhangi bir üye tanımının dışında olmalıdır.
En azından, oluşturma sırasında BindableProperty aşağıdaki parametrelerle birlikte bir tanımlayıcı belirtilmelidir:
BindablePropertyöğesinin adı.- Özelliğin türü.
- Sahip olan nesnenin türü.
- Özelliğin varsayılan değeri. Bu, özelliği, her zaman, ayarlandığında belirli bir varsayılan değer döndürüyor ve özellik türü için varsayılan değerden farklı olabilir. _BindableObject_ClearValue_ Xamarin_Forms _bindavbleproperty_ "Data-LinkType =" Absolute-path ">
ClearValueyöntemi bağlanabilir özellikte çağrıldığında varsayılan değer Xamarin_Forms geri yüklenecektir.
Önemli
Bağlanabilir özellikler için adlandırma kuralı, bağlanabilir özellik tanımlayıcısının yöntemde belirtilen özellik adıyla eşleşmesi gerekir Create , buna "özellik" eklenir.
Aşağıdaki kod, gereken dört parametre için tanımlayıcı ve değerleri içeren bağlanabilir bir özelliğin örneğini gösterir:
public static readonly BindableProperty EventNameProperty =
BindableProperty.Create ("EventName", typeof(string), typeof(EventToCommandBehavior), null);
Bu BindableProperty , türünde adlı bir örnek oluşturur EventNamePropertystring . Özelliği EventToCommandBehavior sınıfına aittir ve varsayılan değerine sahiptir null .
İsteğe bağlı olarak, bir BindableProperty örnek oluştururken aşağıdaki parametreler belirlenebilir:
- Bağlama modu. Bu, özellik değeri değişikliklerinin yayalınacağı yönü belirtmek için kullanılır. Varsayılan bağlama modunda, değişiklikler kaynaktanhedefeyayılır.
- Özellik değeri ayarlandığında çağrılacak doğrulama temsilcisi. Daha fazla bilgi için bkz. doğrulama geri çağırmaları.
- Özellik değeri değiştiğinde çağrılacak olan bir özellik değiştirildi. Daha fazla bilgi için bkz. özellik değişikliklerini algılama.
- Özellik değeri değiştiğinde çağrılacak temsilciyi değiştiren bir özellik. Bu temsilci, özellik değiştirilen temsilciyle aynı imzaya sahip.
- Özellik değeri değiştiğinde çağrılacak bir zorunlu değer temsilcisi. Daha fazla bilgi için bkz. coerce değeri geri çağırmaları.
FuncVarsayılan bir özellik değerini başlatmak için kullanılır. Daha fazla bilgi için bkz. Func ile varsayılan değer oluşturma.
Erişimcileri oluştur
Özellik erişimcilerinin bağlanabilir bir özelliğe erişmek için özellik sözdizimini kullanması gerekir. GetErişimci, ilgili bağlanabilir özellikte bulunan değeri döndürmelidir. Bu, Xamarin_FormsGetValue değerin alınacağı bağlanabilir özellik tanımlayıcısını geçirerek ve sonra sonucu gerekli türe vurarak Xamarin_Forms _BindableObject_GetValue_ _bindadpropertyproperty_ "Data-LinkType =" Absolute-path ">yöntemi çağırarak elde edilebilir. SetErişimci ilgili bağlanabilir özelliğin değerini ayarlamış olmalıdır. Bu, Xamarin_Forms _BindableObject_SetValue_ Xamarin_Forms _BindableProperty_System_Object_ "Data-LinkType =" Absolute-path ">SetValue yöntemi çağırarak, değeri ayarlanacak bağlanabilir özellik tanımlayıcısı ve ayarlanacak değer aracılığıyla elde edilebilir.
Aşağıdaki kod örneği, bağlanabilir özellik için erişimcileri gösterir EventName :
public string EventName
{
get { return (string)GetValue (EventNameProperty); }
set { SetValue (EventNameProperty, value); }
}
Bağlanabilir bir özelliği tüketme
Bağlanabilir bir özellik oluşturulduktan sonra XAML veya koddan tüketilebilir. XAML 'de, bu, CLR ad alanı adı ve isteğe bağlı olarak bir derleme adı belirten ad alanı bildirimiyle, öneki olan bir ad alanı bildirerek elde edilir. Daha fazla bilgi için bkz. xaml ad alanları.
Aşağıdaki kod örneği, özel türe başvuran uygulama kodu ile aynı derlemede tanımlanan bağlanabilir bir özelliği içeren özel bir tür için XAML ad alanını gösterir:
<ContentPage ... xmlns:local="clr-namespace:EventToCommandBehavior" ...>
...
</ContentPage>
Ad alanı bildirimi, EventName AŞAĞıDAKI xaml kod örneğinde gösterildiği gibi, bağlanabilir özelliği ayarlanırken kullanılır:
<ListView ...>
<ListView.Behaviors>
<local:EventToCommandBehavior EventName="ItemSelected" ... />
</ListView.Behaviors>
</ListView>
Benzer C# kodu aşağıdaki kod örneğinde gösterilmektedir:
var listView = new ListView ();
listView.Behaviors.Add (new EventToCommandBehavior
{
EventName = "ItemSelected",
...
});
Gelişmiş senaryolar
Bir örnek oluştururken BindableProperty , gelişmiş bağlanabilir Özellik senaryolarını etkinleştirmek üzere ayarlanedilebilecek bir dizi isteğe bağlı parametre vardır. Bu bölümde bu senaryolar incelenmektedir.
Özellik değişikliklerini Algıla
staticÖzellik değiştirme geri çağırma yöntemi, propertyChanged Xamarin_Forms static _BindableProperty_Create_System_String_System_Type_System_Type_System_Object_ Xamarin_Forms _bindingmode_ Xamarin_Forms _BindableProperty_ValidateValueDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangedDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangingDelegate_ Xamarin_FormsXamarin_Forms parametresi belirtilerek bağlanabilir bir özellik ile kaydedilebilir _BindableProperty_CoerceValueDelegate_ "Data-LinkType =" Absolute-path ">BindableProperty.Create yöntemi _BindableProperty_CreateDefaultValueDelegate_. Belirtilen geri çağırma yöntemi, bağlanabilir özelliğin değeri değiştiğinde çağrılır.
Aşağıdaki kod örneği, EventName bağlanabilir özelliğin OnEventNameChanged yöntemi özelliği değiştirilmiş bir geri çağırma yöntemi olarak nasıl kaydedeceğini göstermektedir:
public static readonly BindableProperty EventNameProperty =
BindableProperty.Create (
"EventName", typeof(string), typeof(EventToCommandBehavior), null, propertyChanged: OnEventNameChanged);
...
static void OnEventNameChanged (BindableObject bindable, object oldValue, object newValue)
{
// Property changed implementation goes here
}
Özellik tarafından değiştirilen geri çağırma yönteminde BindableObject parametresi, sahip olan sınıfın hangi örneğinin bir değişiklik raporladığını belirtmek için kullanılır ve iki parametrenin değerleri, object bağlanabilir özelliğin eski ve yeni değerlerini temsil eder.
Doğrulama geri çağırmaları
Bir static doğrulama geri çağırma yöntemi, validateValue Xamarin_Forms static _BindableProperty_Create_System_String_System_Type_System_Type_System_Object_ Xamarin_Forms _bindingmode_ Xamarin_Forms _BindableProperty_ValidateValueDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangedDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangingDelegate_ Xamarin_FormsXamarin_Forms parametresi belirtilerek bağlanabilir bir özellik ile kaydedilebilir _BindableProperty_CoerceValueDelegate_ "Data-LinkType =" Absolute-path ">BindableProperty.Create yöntemi _BindableProperty_CreateDefaultValueDelegate_. Belirtilen geri çağırma yöntemi, bağlanabilir özelliğinin değeri ayarlandığında çağrılacaktır.
Aşağıdaki kod örneği, Angle bağlanabilir özelliğin IsValidValue yöntemi bir doğrulama geri çağırma yöntemi olarak nasıl kaydedeceğini göstermektedir:
public static readonly BindableProperty AngleProperty =
BindableProperty.Create ("Angle", typeof(double), typeof(HomePage), 0.0, validateValue: IsValidValue);
...
static bool IsValidValue (BindableObject view, object value)
{
double result;
bool isDouble = double.TryParse (value.ToString (), out result);
return (result >= 0 && result <= 360);
}
Doğrulama geri çağırmaları bir değer ile sağlanır ve true değer özellik için geçerli ise, aksi takdirde döndürmelidir false . Bir doğrulama geri araması döndürülürse false , bu, geliştirici tarafından işlenmesi gereken bir özel durum oluşur. Bir doğrulama geri çağırma yönteminin tipik bir kullanımı, bağlanabilir özelliği ayarlandığında tamsayıların veya Double değerlerinin değerlerini kısıtlayan bir yöntemdir. Örneğin IsValidValue yöntemi, özellik değerinin double 0 ile 360 arasında olduğunu denetler.
Coerce değeri geri çağırmaları
Bir static coerce değeri geri çağırma yöntemi, coerceValue Xamarin_Forms static _BindableProperty_Create_System_String_System_Type_System_Type_System_Object_ Xamarin_Forms _bindingmode_ Xamarin_Forms _BindableProperty_ValidateValueDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangedDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangingDelegate_ Xamarin_FormsXamarin_Forms parametresi belirtilerek bağlanabilir bir özellik ile kaydedilebilir _BindableProperty_CoerceValueDelegate_ "Data-LinkType =" Absolute-path ">BindableProperty.Create yöntemi _BindableProperty_CreateDefaultValueDelegate_. Belirtilen geri çağırma yöntemi, bağlanabilir özelliğin değeri değiştiğinde çağrılır.
Önemli
BindableObjectTürün CoerceValue , kendi bağımsız değişkeninin değerinin yeniden değerlemeyi zorlamak için çağrılabilecek bir yöntemi vardır ve bu, BindableProperty zorunlu değer geri çağırma işlemini çağırır.
Zorunlu değer geri çağırmaları, özelliğin değeri değiştiğinde bağlanabilir bir özelliğin yeniden değerlendirilmesini zorlamak için kullanılır. Örneğin, tek bir bağlanabilir özelliğin değerinin başka bir bağlanabilir özelliğin değerinden büyük olmamasını sağlamak için bir coerce değeri geri çağırması kullanılabilir.
Aşağıdaki kod örneği, Angle bağlanabilir özelliğin CoerceAngle yöntemi bir coerce değeri geri çağırma yöntemi olarak nasıl kaydedeceğini göstermektedir:
public static readonly BindableProperty AngleProperty = BindableProperty.Create (
"Angle", typeof(double), typeof(HomePage), 0.0, coerceValue: CoerceAngle);
public static readonly BindableProperty MaximumAngleProperty = BindableProperty.Create (
"MaximumAngle", typeof(double), typeof(HomePage), 360.0, propertyChanged: ForceCoerceValue);
...
static object CoerceAngle (BindableObject bindable, object value)
{
var homePage = bindable as HomePage;
double input = (double)value;
if (input > homePage.MaximumAngle)
{
input = homePage.MaximumAngle;
}
return input;
}
static void ForceCoerceValue(BindableObject bindable, object oldValue, object newValue)
{
bindable.CoerceValue(AngleProperty);
}
CoerceAngleYöntemi, özelliğinin değerini denetler MaximumAngle ve Angle özellik değeri bundan büyükse değeri MaximumAngle özellik değerine zorlar. Buna ek olarak, MaximumAngle özelliği yöntemi çağırarak özellik üzerinde coerce değeri geri çağırma çağrılır AngleCoerceValue .
Func ile varsayılan bir değer oluşturma
Func, Aşağıdaki kod örneğinde gösterildiği gibi, bağlanabilir bir özelliğin varsayılan değerini başlatmak için kullanılabilir:
public static readonly BindableProperty SizeProperty =
BindableProperty.Create ("Size", typeof(double), typeof(HomePage), 0.0,
defaultValueCreator: bindable => Device.GetNamedSize (NamedSize.Large, (Label)bindable));
defaultValueCreatorParametresi, FuncdefaultValueCreatorXamarin_FormsDevice.GetNamedSizedouble Yerel platformda bir üzerinde kullanılan yazı tipi için adlandırılmış boyutu temsil eden "Data-LinkType =" absolute-path ">döndüren bir Xamarin_Forms _Device_GetNamedSize_ _NamedSize_System_Type_ çağırır Label .
Örneği indirin