Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace WinUI umožňují používat funkce jako listový krok v cestě datové vazby pomocí rozšíření značek {x:Bind}. Tato funkce zjednodušuje převod hodnot a umožňuje vazby záviset na několika parametrech, aby byla aplikace dynamičtější a efektivnější.
Tip
Obecné informace o používání datových vazeb v aplikaci s
V následujícím příkladu jsou pozadí a popředí položky vázány na funkce, které provádějí převod na základě barevného parametru.
<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);
}
}
Použití atributu XAML
<object property="{x:Bind pathToFunction.FunctionName(functionParameter1, functionParameter2, ...), bindingProperties}" ... />
Cesta k funkci
Zadejte cestu k funkci jako ostatní cesty vlastností. Cesta může obsahovat tečky (.), indexery nebo konverze k identifikaci funkce.
XMLNamespace:ClassName.MethodName Pomocí syntaxe můžete zadat statické funkce. Například použijte následující syntaxi k propojení se statickými funkcemi v code-behind.
<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;
}
}
Systémové funkce můžete také použít přímo ve značkách k provádění jednoduchých scénářů, jako je formátování dat, formátování textu, zřetězení textu a další. Například:
<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>
Pokud nastavíte režim na OneWay nebo TwoWay, cesta funkce podporuje detekci změn. Modul vazeb znovu vyhodnotí vazbu, pokud se tyto objekty změní.
Funkce, na kterou jste vázáni, potřebuje:
- Mějte přístup ke kódu a metadatům – proto interní nebo privátní funguje v jazyce C#, ale jazyk C++ potřebuje, aby metody byly veřejné jako metody WinRT.
- Podpora přetížení na základě počtu argumentů, nikoli typu, a snaží se najít první přetížení, které má přesně tolik argumentů.
- Mají typy argumentů, které odpovídají předávaným datům – modul vazeb neprovádí zužující převody.
- Mít návratový typ, který odpovídá typu vlastnosti, která používá vazbu
Modul vazeb reaguje na oznámení o změnách vlastností aktivovaných názvem funkce a podle potřeby znovu vyhodnotí vazby. Například:
<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
Pomocí funkcí x:Bind dosáhnete stejných scénářů jako v rámci převaděčů a multibindingu ve WPF.
Argumenty funkce
Zadejte více argumentů funkce oddělených čárkami (,).
- Cesta vazby – Použijte stejnou syntaxi, jako kdybyste byli vázáni přímo na tento objekt.
- Pokud nastavíte režim na OneWay nebo TwoWay, vazba zjistí změny a znovu vyhodnocuje, když se objekt změní.
- Konstantní řetězec uzavřený v uvozovkách – zahrňte uvozovky, které ho označí jako řetězec. Pomocí klobouku (^) můžete uvozovat uvozovky v řetězcích.
- Konstantní číslo – například -123,456.
- Logická hodnota – Zadejte hodnotu x:True nebo x:False.
Tip
TargetNullValue se vztahuje na výsledek volání funkce, ne na žádné vázané argumenty.
Obousměrné propojení funkcí
Ve dvoucestném scénáři vazby je nutné zadat druhou funkci pro opačný směr vazby. Použijte vlastnost vazby BindBack pro tuto funkci. V následujícím příkladu funkce přebírá jeden argument, což je hodnota, kterou je potřeba vrátit zpět do modelu.
<TextBlock Text="{x:Bind a.MyFunc(b), BindBack=a.MyFunc2, Mode=TwoWay}" />
Viz také
Windows developer