Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
WinUI uygulamaları, veri bağlama yolunun yaprak adımı olarak işlevleri {x:Bind} işaretleme uzantısında kullanmanıza olanak sağlar. Bu özellik değer dönüştürmeyi basitleştirir ve bağlamaların birden çok parametreye bağımlı olmasını sağlayarak uygulamanızı daha dinamik ve verimli hale getirir.
Tip
Uygulamanızda veri bağlamayı {x:Bind} ile kullanma hakkında genel bilgi için (ve {x:Bind} ile {Binding}arasında tam karşılaştırma için) bkz. Derinlemesine Veri Bağlama ve {x:Bind} İşaretleme Uzantısı.
Aşağıdaki örnekte, öğenin arka planı ve ön planı renk parametresine göre dönüştürme işlemi gerçekleştiren işlevlere bağlıdır.
<DataTemplate x:DataType="local:ColorEntry">
<Grid Background="{x:Bind local:ColorEntry.Brushify(Color), Mode=OneWay}" Width="240">
<TextBlock Text="{x:Bind ColorName}" Foreground="{x:Bind TextColor(Color)}" Margin="10,5" />
</Grid>
</DataTemplate>
public class ColorEntry
{
public string ColorName { get; set; }
public Color Color { get; set; }
public static SolidColorBrush Brushify(Color c)
{
return new SolidColorBrush(c);
}
public SolidColorBrush TextColor(Color c)
{
return new SolidColorBrush(((c.R * 0.299 + c.G * 0.587 + c.B * 0.114) > 150) ? Colors.Black : Colors.White);
}
}
XAML öznitelik kullanımı
<object property="{x:Bind pathToFunction.FunctionName(functionParameter1, functionParameter2, ...), bindingProperties}" ... />
İşlevin yolu
İşlevin yolunu diğer özellik yolları gibi belirtin. Yol, işlevi bulmak için noktalar (.), indeksleyiciler veya tip dönüşümleri içerebilir.
XMLNamespace:ClassName.MethodName Statik işlevleri belirtmek için söz dizimini kullanın. Örneğin, arka planda statik işlevlere bağlanmak için aşağıdaki söz dizimini kullanın.
<Window
xmlns:local="using:MyNamespace">
...
<StackPanel>
<TextBlock x:Name="BigTextBlock" FontSize="20" Text="Big text" />
<TextBlock FontSize="{x:Bind local:MyHelpers.Half(BigTextBlock.FontSize)}"
Text="Small text" />
</StackPanel>
</Window>
namespace MyNamespace
{
static public class MyHelpers
{
public static double Half(double value) => value / 2.0;
}
}
Tarih biçimlendirmesi, metin biçimlendirmesi, metin birleştirmeleri ve daha fazlası gibi basit senaryoları gerçekleştirmek için sistem işlevlerini doğrudan işaretlemede de kullanabilirsiniz. Örneğin:
<Window
xmlns:sys="using:System"
xmlns:local="using:MyNamespace">
...
<CalendarDatePicker Date="{x:Bind sys:DateTime.Parse(TextBlock1.Text)}" />
<TextBlock Text="{x:Bind sys:String.Format('{0} is now available in {1}', local:MyPage.personName, local:MyPage.location)}" />
</Window>
Modu OneWay veya TwoWay olarak ayarlarsanız işlev yolu değişiklik algılamayı destekler. Bağlama altyapısı, bu nesneler değişirse bağlamayı yeniden değerlendirir.
Bağladığınız işlevin aşağıdakileri yapması gerekir:
- Kod ve meta veriler için erişilebilir olun; bu nedenle iç veya özel C# dilinde çalışır, ancak C++ için yöntemlerin genel WinRT yöntemleri olması gerekir
- Türe değil bağımsız değişken sayısına göre aşırı yüklemeyi destekler ve ilk aşırı yüklemeyi bu kadar çok bağımsız değişkenle eşleştirmeye çalışır
- Geçirilen veri türleriyle eşleşen parametre türlerine sahip olun; bağlama motoru daraltma dönüştürmeleri gerçekleştirmez.
- Bağlamayı kullanan özelliğin türüyle eşleşen bir dönüş türüne sahip olmak
Bağlama altyapısı işlev adıyla tetiklenen özellik değişikliği bildirimlerine tepki gösterir ve gerektiğinde bağlamaları yeniden değerlendirir. Örneğin:
<DataTemplate x:DataType="local:Person">
<StackPanel>
<TextBlock Text="{x:Bind FullName}" />
<Image Source="{x:Bind IconToBitmap(Icon, CancellationToken), Mode=OneWay}" />
</StackPanel>
</DataTemplate>
public class Person : INotifyPropertyChanged
{
//Implementation for an Icon property and a CancellationToken property with PropertyChanged notifications
...
//IconToBitmap function is essentially a multi binding converter between several options.
public Uri IconToBitmap (Uri icon, Uri cancellationToken)
{
var foo = new Uri(...);
if (isCancelled)
{
foo = cancellationToken;
}
else
{
if (fullName.Contains("Sr"))
{
//pass a different Uri back
foo = new Uri(...);
}
else
{
foo = icon;
}
}
return foo;
}
//Ensure FullName property handles change notification on itself as well as IconToBitmap since the function uses it
public string FullName
{
get { return fullName; }
set
{
fullName = value;
OnPropertyChanged();
OnPropertyChanged("IconToBitmap");
//this ensures Image.Source binding re-evaluates when FullName changes in addition to Icon and CancellationToken
}
}
}
Tip
WPF'de Dönüştürücüler ve MultiBinding aracılığıyla desteklenen senaryolarla aynı senaryoları elde etmek için içindeki x:Bind işlevlerini kullanın.
Fonksiyon argümanları
Virgülle (,) ayrılmış birden çok işlev bağımsız değişkeni belirtin.
- Bağlama Yolu – Doğrudan bu nesneye bağlanmış gibi aynı söz dizimini kullanın.
- Modu OneWay veya TwoWay olarak ayarlarsanız, bağlama değişiklikleri algılar ve nesne değiştiğinde yeniden değerlendirir.
- Tırnak içine alınmış sabit dize : Dize olarak ayarlamak için tırnak işaretleri ekleyin. Dizelerde tırnak işaretlerini kaçmak için şapkayı (^) kullanın.
- Sabit sayı – Örneğin, -123,456.
- Boole: "x:True" veya "x:False" olarak belirtin.
Tip
TargetNullValue , ilişkili bağımsız değişkenlere değil işlev çağrısının sonucuna uygulanır.
İki yönlü fonksiyon bağlantıları
İki yönlü bağlama senaryosunda bağlamanın ters yönü için ikinci bir işlev belirtmeniz gerekir.
BindBack Bu işlev için bağlama özelliğini kullanın. Aşağıdaki örnekte, işlev modele geri gönderilmesi gereken değeri belirten bir bağımsız değişken alır.
<TextBlock Text="{x:Bind a.MyFunc(b), BindBack=a.MyFunc2, Mode=TwoWay}" />
Ayrıca bakınız
Windows developer