Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Xamarin.Forms XAML bietet Unterstützung für die Verwendung generischer CLR-Typen, indem die generischen Einschränkungen als Typargumente angegeben werden. Diese Unterstützung wird über die Anweisung x:TypeArguments bereitgestellt, die die einschränkenden Typargumente eines generischen Typs an den Konstruktor des generischen Typs übergibt.
Wichtig
Das Definieren generischer Klassen in Xamarin.Forms XAML mit der x:TypeArguments Direktive wird nicht unterstützt.
Typargumente werden als Zeichenfolge angegeben und in der Regel mit einem Präfix versehen, z. B. sys:String und sys:Int32. Präfixierung ist erforderlich, da die typischen Typen generischer CLR-Einschränkungen aus Bibliotheken stammen, die nicht dem Standardnamespace Xamarin.Forms zugeordnet sind. Die in XAML 2009 integrierten 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 über die in XAML 2009 integrierten Typen finden Sie unter XAML 2009-Sprachprimitive.
Mehrere Typargumente können mit einem Trennzeichen (Komma) angegeben werden. Wenn eine generische Einschränkung generische Typen verwendet, sollten die geschachtelten Argumente für den Einschränkungstyp außerdem in Klammern gesetzt werden.
Hinweis
Die x:Type Markuperweiterung stellt einen CLR-Typverweis 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.
Einzelnes Grundtypargument
Ein einzelnes Grundtypargument kann mit der Anweisung x:TypeArguments als Zeichenfolgenargument mit einem Präfix angegeben werden:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 ist System.Collections.Generic als der XAML-Namespace scg definiert. Die Eigenschaft CollectionView.ItemsSource wird auf List<T> festgelegt und mit einem string-Typargument instanziiert, wobei der in XAML 2009 integrierte Typ x:String verwendet wird. Die Sammlung List<string> wird mit mehreren string-Elementen initialisiert.
Die Sammlung List<T> kann alternativ, aber gleichwertig, mit dem CLR-Typ String instanziiert werden:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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>
Einzelnes Objekttypargument
Ein einzelnes Objekttypargument kann mit der Anweisung x:TypeArguments als Zeichenfolgenargument mit Präfix angegeben werden:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 ist GenericsDemo.Models als der XAML-Namespace models und System.Collections.Generic als der XAML-Namespace scg definiert. Die Eigenschaft CollectionView.ItemsSource wird auf List<T> festgelegt und mit einem Monkey-Typargument instanziiert. Die Sammlung List<Monkey> wird mit mehreren Monkey-Objekten initialisiert, und eine DataTemplate, die das Aussehen jedes Monkey-Objekts definiert, wird als ItemTemplate von CollectionView festgelegt.
Mehrere Typargumente
Mehrere Typargumente können als vorangestellte Zeichenfolgenargumente, die durch ein Komma getrennt sind, mit der Anweisung x:TypeArguments angegeben werden. Wenn eine generische Einschränkung generische Typen verwendet, werden die geschachtelten Argumente für den Einschränkungstyp in Klammern gesetzt:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 ist GenericsDemo.Models als der XAML-Namespace models und System.Collections.Generic als der XAML-Namespace scg definiert. Die Eigenschaft CollectionView.ItemsSource wird auf List<T> gesetzt und mit einer Einschränkung KeyValuePair<TKey, TValue> mit den inneren Argumenten des Einschränkungstyps string und Monkey instanziiert. Die Sammlung List<KeyValuePair<string,Monkey>> wird mit mehreren KeyValuePair-Elementen initialisiert, wobei der nicht standardmäßige KeyValuePair-Konstruktor verwendet wird, und eine DataTemplate, die das Aussehen jedes Monkey-Objekts definiert, wird als ItemTemplate von CollectionView festgelegt. Informationen zum Übergeben von Argumenten an einen nicht standardmäßigen Konstruktor finden Sie unter Übergeben von Konstruktorargumenten.