Generika
.NET Multi-platform App UI (.NET MAUI) XAML bietet Unterstützung für die Verwendung generischer CLR-Typen, indem die generischen Einschränkungen als Typargumente angegeben werden. Diese Unterstützung wird von der x:TypeArguments
-Direktive bereitgestellt, die die einschränkenden Typargumente eines generischen Typs an den Konstruktor des generischen Typs übergibt.
Typargumente werden als Zeichenfolge angegeben und werden in der Regel präfixiert, z. B. sys:String
und sys:Int32
. Präfixierung ist erforderlich, da die typischen Typen generischer CLR-Einschränkungen aus Bibliotheken stammen, die nicht den standardmäßigen .NET MAUI-Namespaces zugeordnet sind. Die integrierten XAML 2009-Typen wie x:String
und x:Int32
können jedoch auch als Typargumente angegeben werden, wobei x
der XAML-Sprachnamespace für XAML 2009 ist. Weitere Informationen zu den integrierten XAML 2009-Typen finden Sie unter XAML 2009-Sprachgrundtypen.
Wichtig
Das Definieren generischer Typen in .NET MAUI XAML mit der x:TypeArguments
-Direktive wird nicht unterstützt.
Mehrere Typargumente können mithilfe eines Kommastrennzeichens angegeben werden. Wenn eine generische Einschränkung generische Typen verwendet, sollten die geschachtelten Einschränkungstypargumente in Klammern enthalten sein.
Anmerkung
Die x:Type
-Markuperweiterung stellt einen ClR-Typverweis (Common Language Runtime) für einen generischen Typ bereit und hat eine ähnliche Funktion wie der typeof
-Operator in C#. Weitere Informationen finden Sie unter x:Type-Markuperweiterung.
Informationen zum Angeben generischer Typen in .NET MAUI XAML mit den Direktiven x:DataType
und x:Type
finden Sie unter Kompilierungsbindungen, die einen generischen Typ und x:Type-Markuperweiterungangeben.
Argument für einen einfachen Grundtyp
Ein einzelnes Grundtypargument kann mithilfe der x:TypeArguments
-Direktive als präfixiertes Zeichenfolgenargument angegeben werden:
<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 diesem Beispiel wird System.Collections.Generic
als scg
XAML-Namespace definiert. Die CollectionView.ItemsSource
-Eigenschaft wird auf eine List<T>
festgelegt, die mit einem string
Typargument instanziiert wird, wobei der integrierte XAML 2009-x:String
-Typ verwendet wird. Die List<string>
-Sammlung wird mit mehreren string
-Elementen initialisiert.
Alternativ, aber gleichwertig, kann die List<T>
-Auflistung mit dem CLR-String
-Typ instanziiert werden.
<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 "Einzelner Objekttyp"
Ein einzelnes Objekttypargument kann mithilfe der x:TypeArguments
-Direktive als präfixiertes Zeichenfolgenargument angegeben werden:
<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>
<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 diesem Beispiel wird GenericsDemo.Models
als models
XAML-Namespace definiert, und System.Collections.Generic
wird als scg
XAML-Namespace definiert. Die CollectionView.ItemsSource
-Eigenschaft wird auf eine List<T>
festgelegt, die mit einem Monkey
-Typargument instanziiert wird. Die List<Monkey>
-Auflistung wird mit mehreren Monkey
Elementen initialisiert, und ein DataTemplate, der die Darstellung jedes Monkey
Objekts definiert, wird als ItemTemplate
des CollectionViewfestgelegt.
Mehrere Typargumente
Mehrere Typargumente können als präfixierte Zeichenfolgenargumente angegeben werden, die durch ein Komma getrennt werden, wobei die x:TypeArguments
-Direktive verwendet wird. Wenn eine generische Einschränkung generische Typen verwendet, sind die geschachtelten Einschränkungstypargumente in Klammern enthalten:
<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>
<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 diesem Beispiel wird GenericsDemo.Models
als models
XAML-Namespace definiert, und System.Collections.Generic
wird als scg
XAML-Namespace definiert. Die CollectionView.ItemsSource
-Eigenschaft wird auf eine List<T>
gesetzt, die mit einer KeyValuePair<TKey, TValue>
-Beschränkung erzeugt wird, wobei die einschränkenden Typargumente string
und Monkey
sind. Die List<KeyValuePair<string,Monkey>>
-Auflistung wird mit mehreren KeyValuePair
Elementen initialisiert, wobei der nicht standardmäßige KeyValuePair
-Konstruktor verwendet wird, und ein DataTemplate, der die Darstellung jedes Monkey
Objekts definiert, wird als ItemTemplate
des CollectionViewfestgelegt. Informationen zum Übergeben von Argumenten an einen nicht standardmäßigen Konstruktor finden Sie unter Übergeben von Konstruktorargumenten.