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 ResourceDictionaryolarak 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 Bağlama

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 nulluygulanacak 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 ResourceDictionaryolarak 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 Bağlama

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.