Xamarin.Forms Bağlama Geri Dönüşleri
Bazen bağlama kaynağı çözümlenemediğinden veya bağlama başarılı olduğundan ancak bir null
değer döndürdüğünden veri bağlamaları başarısız olur. Bu senaryolar değer dönüştürücüleri veya diğer ek kodlarla işlense de, bağlama işlemi başarısız olursa kullanılacak geri dönüş değerleri tanımlanarak veri bağlamaları daha sağlam hale getirilebilir. Bu, bağlama ifadesinde ve TargetNullValue
özellikleri tanımlanarak FallbackValue
gerçekleştirilebilir. Bu özellikler sınıfında bulunduğundan BindingBase
bağlamalar, çoklu bağlamalar, derlenmiş bağlamalar ve işaretleme uzantısı ile Binding
kullanılabilir.
Not
FallbackValue
Bağlama ifadesinde ve TargetNullValue
özelliklerinin kullanımı isteğe bağlıdır.
Geri dönüş değeri tanımlama
özelliği, FallbackValue
bağlama kaynağı çözümlenemedikçe kullanılacak bir geri dönüş değerinin tanımlanmasını sağlar. Bu özelliği ayarlamak için yaygın bir senaryo, heterojen türlerden oluşan bir ilişkili koleksiyondaki tüm nesnelerde mevcut olmayan kaynak özelliklere bağlamadır.
MonkeyDetail sayfasında özelliğin ayarlanması gösterilmektedirFallbackValue
:
<Label Text="{Binding Population, FallbackValue='Population size unknown'}"
... />
üzerindeki Label
bağlama, bağlama kaynağı çözümlenemiyorsa hedefte ayarlanacak bir FallbackValue
değer tanımlar. Bu nedenle, özelliği tarafından FallbackValue
tanımlanan değer, özelliği ilişkili nesnede yoksa görüntülenir Population
. Burada özellik değerinin FallbackValue
tek tırnak (kesme işareti) karakterlerle sınırlandırılmış olduğuna dikkat edin.
Özellik değerlerini satır içinde tanımlamak FallbackValue
yerine, içinde kaynak ResourceDictionary
olarak tanımlamanız önerilir. Bu yaklaşımın avantajı, bu tür değerlerin tek bir konumda bir kez tanımlanması ve daha kolay yerelleştirilebilir olmasıdır. Daha sonra kaynaklar işaretleme uzantısı kullanılarak StaticResource
alınabilir:
<Label Text="{Binding Population, FallbackValue={StaticResource populationUnknown}}"
... />
Not
Özelliğini bağlama ifadesiyle ayarlamak FallbackValue
mümkün değildir.
Çalışan program şu şekildedir:
FallbackValue
Özelliği bir bağlama ifadesinde ayarlanmadıysa ve bağlama yolu veya yolun bir bölümü çözümlenmediğinde hedefte BindableProperty.DefaultValue
ayarlanır. Ancak özellik ayarlandığında ve bağlama yolu veya yolun bir bölümü çözümlenmediğinde FallbackValue
, value özelliğinin FallbackValue
değeri hedefte ayarlanır. Bu nedenle, monkeyDetail sayfasında Label
"Popülasyon boyutu bilinmiyor" ifadesini görüntüler çünkü ilişkili nesnede bir Population
özellik eksiktir.
Önemli
Tanımlı değer dönüştürücüsü, özellik ayarlandığında bağlama ifadesinde FallbackValue
yürütülmedi.
Null değiştirme değeri tanımlama
TargetNullValue
özelliği, bağlama kaynağı çözümlendiğinde kullanılacak bir değiştirme değerinin tanımlanmasına izin verir, ancak değeri olurnull
. Bu özelliği ayarlamaya yönelik yaygın bir senaryo, ilişkili bir koleksiyonda olabilecek null
kaynak özelliklere bağlamadır.
Monkeys sayfasında özelliğin ayarlanması gösterilmektedirTargetNullValue
:
<ListView ItemsSource="{Binding Monkeys}"
...>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
...
<Image Source="{Binding ImageUrl, TargetNullValue='https://upload.wikimedia.org/wikipedia/commons/2/20/Point_d_interrogation.jpg'}"
... />
...
<Label Text="{Binding Location, TargetNullValue='Location unknown'}"
... />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ve üzerindeki Image
bağlamalar, Label
bağlama yolu döndürürse null
uygulanacak değerleri tanımlarTargetNullValue
. Bu nedenle, ve Location
özelliklerinin tanımlanmadığı ImageUrl
koleksiyondaki tüm nesneler için özellikler tarafından TargetNullValue
tanımlanan değerler görüntülenir. Burada özellik değerlerinin TargetNullValue
tek tırnak (kesme işareti) karakterleriyle sınırlandırıldığını görebilirsiniz.
Özellik değerlerini satır içinde tanımlamak TargetNullValue
yerine, içinde kaynak ResourceDictionary
olarak tanımlamanız önerilir. Bu yaklaşımın avantajı, bu tür değerlerin tek bir konumda bir kez tanımlanması ve daha kolay yerelleştirilebilir olmasıdır. Daha sonra kaynaklar işaretleme uzantısı kullanılarak StaticResource
alınabilir:
<Image Source="{Binding ImageUrl, TargetNullValue={StaticResource fallbackImageUrl}}"
... />
<Label Text="{Binding Location, TargetNullValue={StaticResource locationUnknown}}"
... />
Not
Özelliğini bağlama ifadesiyle ayarlamak TargetNullValue
mümkün değildir.
Çalışan program şu şekildedir:
TargetNullValue
Özelliği bir bağlama ifadesinde ayarlanmadığında, bir değer dönüştürücü tanımlanırsa kaynak değeri null
dönüştürülür, tanımlanmışsa StringFormat
biçimlendirilir ve sonuç hedefte ayarlanır. Ancak özelliği TargetNullValue
ayarlandığında, bir null
değer dönüştürücüsü tanımlanırsa ve dönüştürme işleminden sonraysa null
, özelliğin TargetNullValue
değeri hedefte ayarlanır.
Önemli
Özellik ayarlandığında bağlama ifadesinde TargetNullValue
dize biçimlendirmesi uygulanmaz.