Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Az adatkötés alkalmazásbeli használatáról a(z) {x:Bind}
A Windows 10 1607-es verziójától kezdve {x:Bind} támogatja a függvény használatát a kötési útvonal levéllépéseként. Ez a következőket teszi lehetővé:
- Az értékátalakítás egyszerűbb módja
- Egy módszer arra, hogy a kötések egynél több paramétertől függjenek
Megjegyzés:
A függvények {x:Bind} használatával való használatához az alkalmazás minimális cél SDK-verziójának 14393-as vagy újabb verziónak kell lennie. Nem használhat függvényeket, ha az alkalmazás a Windows 10 korábbi verzióit célozza meg. További információ a célverziókról: Adaptív kód.
Az alábbi példában az elem háttere és előtere függvényekhez van kötve a színparaméter alapján történő átalakításhoz
<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>
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-attribútumok használata
<object property="{x:Bind pathToFunction.FunctionName(functionParameter1, functionParameter2, ...), bindingProperties}" ... />
A függvény elérési útja
A függvény
A statikus függvények az XMLNamespace:ClassName.MethodName szintaxissal adhatók meg. Használja például az alábbi szintaxist a statikus függvényekhez való kötéshez a kód mögötti kódban.
<Page
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>
</Page>
namespace MyNamespace
{
static public class MyHelpers
{
public static double Half(double value) => value / 2.0;
}
}
A rendszerfüggvényeket közvetlenül jelölőnyelvben is használhatja egyszerű forgatókönyvek megvalósításához, mint például a dátumformázás, szövegformázás, szövegösszefűzés stb., például:
<Page
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)}" />
</Page>
Ha a mód OneWay/TwoWay, akkor a függvény útvonalán változásészlelés lesz végrehajtva, és a kötés újra kiértékelésre kerül, ha ezek az objektumok módosulnak.
A kötött függvénynek a következőkre van szüksége:
- Legyen elérhető a kód és a metaadatok számára – ily módon a belső / privát munka C#-ban történik, de a C++/CX esetében a metódusoknak nyilvános WinRT-metódusoknak kell lenniük.
- A túlterhelés az argumentumok számán alapul, nem a típuson, és megpróbál megegyezni az első túlterheléssel ennyi argumentummal
- Az argumentumtípusoknak meg kell egyezniük az átadott adatokkal – nem hajtunk végre szűkítő konverziókat
- A függvény visszatérési típusának meg kell egyeznie a kötést használó tulajdonság típusával
A kötési motor reagál a függvény nevével aktivált tulajdonságváltozási értesítésekre, és szükség szerint újra kiértékeli a kötéseket. Például:
<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)
{
Uri foo = new Uri(...);
if (isCancelled)
{
foo = cancellationToken;
}
else
{
if (this.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 this.fullName; }
set
{
this.fullName = value;
this.OnPropertyChanged ();
this.OnPropertyChanged ("IconToBitmap");
//this ensures Image.Source binding re-evaluates when FullName changes in addition to Icon and CancellationToken
}
}
}
Jótanács
Az x:Bind függvényekkel ugyanazokat a forgatókönyveket érheti el, mint amit a WPF konverterei és multibindingjei támogattak.
Függvényargumentumok
Több függvényargumentum is megadható, vesszővel elválasztva (,)
- Kötési útvonal – Ugyanaz a szintaxis, mintha közvetlenül az objektumhoz kötött volna.
- Ha a mód OneWay/TwoWay, akkor a rendszer elvégzi a változásészlelést, és újra kiértékeli a kötést az objektumváltozások után
- Idézőjelek közé zárt állandó karaktersorozat – idézőjelek szükségesek annak megjelölésére, hogy karaktersorozatról van szó. A hat (^) sztringekben lévő idézőjelek feloldására használható
- Állandó szám – például -123.456
- Logikai érték – "x:True" vagy "x:False" formában van megadva.
Jótanács
TargetNullValue függvényhívás eredményére vonatkozik, nem pedig kötött argumentumokra.
Kétirányú függvénykapcsolatok
Kétirányú kötés esetén egy második függvényt kell megadni a kötés fordított irányához. Ez a BindBack kötési tulajdonsággal történik. Az alábbi példában a függvénynek egy argumentumot kell használnia, amely az az érték, amelyet vissza kell küldeni a modellbe.
<TextBlock Text="{x:Bind a.MyFunc(b), BindBack=a.MyFunc2, Mode=TwoWay}" />