Generieken
.NET Multi-Platform App UI (.NET MAUI) XAML biedt ondersteuning voor het gebruik van algemene CLR-typen door de algemene beperkingen op te geven als typeargumenten. Deze ondersteuning wordt geboden door de x:TypeArguments
richtlijn, die de beperkende typeargumenten van een generiek doorgeeft aan de constructor van het generieke type.
Typeargumenten worden opgegeven als een tekenreeks en worden meestal voorafgegaan door sys:String
en sys:Int32
. Voorvoegsel is vereist omdat de typische typen algemene CLR-beperkingen afkomstig zijn van bibliotheken die niet zijn toegewezen aan de standaard .NET MAUI-naamruimten. De ingebouwde XAML 2009-typen, zoals x:String
en x:Int32
, kunnen echter ook worden opgegeven als typeargumenten, waarbij x
de XAML-taalnaamruimte is voor XAML 2009. Zie XAML 2009 Language Primitivesvoor meer informatie over de ingebouwde XAML 2009-typen.
Belangrijk
Het definiëren van algemene typen in .NET MAUI XAML, met de x:TypeArguments
-instructie, wordt niet ondersteund.
U kunt meerdere typeargumenten opgeven met behulp van een kommascheidingsteken. Bovendien, als voor een generieke beperking generieke typen worden gebruikt, moeten de geneste argumenten van het beperkingstype tussen haakjes staan.
Notitie
De x:Type
markeringsextensie levert een CLR-typeverwijzing (Common Language Runtime) voor een algemeen type en heeft een vergelijkbare functie als de typeof
-operator in C#. Zie x:Type markeringsextensievoor meer informatie.
Zie Compileer bindingen die een generiek type specificeren en x:Type markup-extensionvoor informatie over het specificeren van generieke typen in .NET MAUI XAML, met behulp van de richtlijnen x:DataType
en x:Type
.
Argument voor één primitief type
Eén primitief typeargument kan worden opgegeven als een voorvoegseltekenreeksargument met behulp van de x:TypeArguments
-instructie:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
...>
<CollectionView>
<CollectionView.ItemsSource>
<scg:List x:TypeArguments="x:String">
<x:String>Baboon</x:String>
<x:String>Capuchin Monkey</x:String>
<x:String>Blue Monkey</x:String>
<x:String>Squirrel Monkey</x:String>
<x:String>Golden Lion Tamarin</x:String>
<x:String>Howler Monkey</x:String>
<x:String>Japanese Macaque</x:String>
</scg:List>
</CollectionView.ItemsSource>
</CollectionView>
</ContentPage>
In dit voorbeeld wordt System.Collections.Generic
gedefinieerd als de scg
XAML-naamruimte. De eigenschap CollectionView.ItemsSource
is ingesteld op een List<T>
die wordt geïnstantieerd met een string
typeargument, met behulp van het ingebouwde x:String
type XAML 2009. De List<string>
verzameling wordt geïnitialiseerd met meerdere string
items.
Als alternatief, maar evenwaardig, kan de List<T>
verzameling worden geïnstantieerd met het CLR String
type.
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:sys="clr-namespace:System;assembly=netstandard"
...>
<CollectionView>
<CollectionView.ItemsSource>
<scg:List x:TypeArguments="sys:String">
<sys:String>Baboon</sys:String>
<sys:String>Capuchin Monkey</sys:String>
<sys:String>Blue Monkey</sys:String>
<sys:String>Squirrel Monkey</sys:String>
<sys:String>Golden Lion Tamarin</sys:String>
<sys:String>Howler Monkey</sys:String>
<sys:String>Japanese Macaque</sys:String>
</scg:List>
</CollectionView.ItemsSource>
</CollectionView>
</ContentPage>
Argument voor enkel objecttype
Een argument voor één objecttype kan worden opgegeven als een voorvoegseltekenreeksargument met behulp van de x:TypeArguments
-instructie:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:models="clr-namespace:GenericsDemo.Models"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
...>
<CollectionView>
<CollectionView.ItemsSource>
<scg:List x:TypeArguments="models:Monkey">
<models:Monkey Name="Baboon"
Location="Africa and Asia"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg" />
<models:Monkey Name="Capuchin Monkey"
Location="Central and South America"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Capuchin_Costa_Rica.jpg/200px-Capuchin_Costa_Rica.jpg" />
<models:Monkey Name="Blue Monkey"
Location="Central and East Africa"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/BlueMonkey.jpg/220px-BlueMonkey.jpg" />
</scg:List>
</CollectionView.ItemsSource>
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="models:Monkey">
<Grid Padding="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Grid.RowSpan="2"
Source="{Binding ImageUrl}"
Aspect="AspectFill"
HeightRequest="60"
WidthRequest="60" />
<Label Grid.Column="1"
Text="{Binding Name}"
FontAttributes="Bold" />
<Label Grid.Row="1"
Grid.Column="1"
Text="{Binding Location}"
FontAttributes="Italic"
VerticalOptions="End" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentPage>
In dit voorbeeld wordt GenericsDemo.Models
gedefinieerd als de models
XAML-naamruimte en wordt System.Collections.Generic
gedefinieerd als de scg
XAML-naamruimte. De eigenschap CollectionView.ItemsSource
is ingesteld op een List<T>
die wordt geïnstantieerd met een Monkey
typeargument. De List<Monkey>
verzameling wordt geïnitialiseerd met meerdere Monkey
items en een DataTemplate waarmee het uiterlijk van elk Monkey
object wordt gedefinieerd als de ItemTemplate
van de CollectionView.
Argumenten voor meerdere typen
Meerdere typeargumenten kunnen worden opgegeven als voorvoegseltekenreeksargumenten, gescheiden door een komma, met behulp van de x:TypeArguments
instructie. Wanneer een algemene beperking algemene typen gebruikt, worden de geneste beperkingstypeargumenten tussen haakjes weergegeven:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:models="clr-namespace:GenericsDemo.Models"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
...>
<CollectionView>
<CollectionView.ItemsSource>
<scg:List x:TypeArguments="scg:KeyValuePair(x:String,models:Monkey)">
<scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
<x:Arguments>
<x:String>Baboon</x:String>
<models:Monkey Location="Africa and Asia"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg" />
</x:Arguments>
</scg:KeyValuePair>
<scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
<x:Arguments>
<x:String>Capuchin Monkey</x:String>
<models:Monkey Location="Central and South America"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Capuchin_Costa_Rica.jpg/200px-Capuchin_Costa_Rica.jpg" />
</x:Arguments>
</scg:KeyValuePair>
<scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
<x:Arguments>
<x:String>Blue Monkey</x:String>
<models:Monkey Location="Central and East Africa"
ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/BlueMonkey.jpg/220px-BlueMonkey.jpg" />
</x:Arguments>
</scg:KeyValuePair>
</scg:List>
</CollectionView.ItemsSource>
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="scg:KeyValuePair(x:String,models:Monkey)">
<Grid Padding="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Grid.RowSpan="2"
Source="{Binding Value.ImageUrl}"
Aspect="AspectFill"
HeightRequest="60"
WidthRequest="60" />
<Label Grid.Column="1"
Text="{Binding Key}"
FontAttributes="Bold" />
<Label Grid.Row="1"
Grid.Column="1"
Text="{Binding Value.Location}"
FontAttributes="Italic"
VerticalOptions="End" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentPage
In dit voorbeeld wordt GenericsDemo.Models
gedefinieerd als de models
XAML-naamruimte en wordt System.Collections.Generic
gedefinieerd als de scg
XAML-naamruimte. De eigenschap CollectionView.ItemsSource
is ingesteld op een List<T>
die wordt geïnstantieerd met een KeyValuePair<TKey, TValue>
beperking, met de binnenste beperkingstypeargumenten string
en Monkey
. De List<KeyValuePair<string,Monkey>>
-verzameling wordt geïnitialiseerd met meerdere KeyValuePair
-items, met behulp van de niet-standaard KeyValuePair
-constructor, en een DataTemplate die het uiterlijk van elk Monkey
-object definieert, wordt ingesteld als de ItemTemplate
voor de CollectionView. Zie Argumenten doorgevenvoor informatie over het doorgeven van argumenten aan een niet-standaardconstructor.