Általános
A .NET többplatformos alkalmazás felhasználói felülete (.NET MAUI) XAML támogatja az általános CLR-típusok használatát az általános kényszerek típusargumentumként való megadásával. Ezt a támogatást a x:TypeArguments
irányelv biztosítja, amely egy általános típus korlátozási típusú argumentumait továbbítja az általános típus konstruktorának.
A típusargumentumok sztringként vannak megadva, és általában előtagként vannak megadva, például sys:String
és sys:Int32
. Előtagolásra azért van szükség, mert a CLR általános megkötéseinek tipikus típusai olyan kódtárakból származnak, amelyek nincsenek leképezve az alapértelmezett .NET MAUI-névterekre. Az XAML 2009 beépített típusok, például a x:String
és a x:Int32
azonban típusargumentumként is megadható, ahol x
az XAML 2009 XAML nyelvi névtere. További információ az XAML 2009 beépített típusairól: XAML 2009 Language Primitives.
Fontos
A .NET MAUI XAML általános típusainak definiálása a x:TypeArguments
irányelvvel nem támogatott.
Vesszőelválasztóval több típusargumentum is megadható. Ezenkívül ha egy általános kényszer általános típusokat használ, a beágyazott kényszertípus argumentumait zárójelben kell tárolni.
Jegyzet
A x:Type
jelölőbővítmény common language runtime (CLR) típusú referenciát biztosít egy általános típushoz, és a C# typeof
operátorához hasonló függvénnyel rendelkezik. További információ: x:Type markup extension.
A .NET MAUI XAML általános típusainak a x:DataType
és x:Type
irányelvekkel való megadásáról a Általános típusú és x:Type markup bővítménycímű témakörben talál további információt.
Egy primitív típusú argumentum
Egyetlen primitív típusú argumentum előtagú sztringargumentumként adható meg a x:TypeArguments
irányelv használatával:
<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>
Ebben a példában a System.Collections.Generic
az scg
XAML-névtérként van definiálva. A CollectionView.ItemsSource
tulajdonság egy List<T>
-ra van beállítva, amely egy string
típusú argumentummal van példányosítva, az XAML 2009 beépített x:String
típusát használva. A List<string>
gyűjtemény több string
elemet tartalmaz.
Másik lehetőségként, de ezzel egyenértékű módon a List<T>
gyűjtemény a CLR String
típussal is példányosítható:
<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>
Egyetlen objektumtípus argumentuma
Egyetlen objektumtípus-argumentum előtagú karakterlánc-argumentumként adható meg a x:TypeArguments
irányelv használatával:
<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>
Ebben a példában a GenericsDemo.Models
az models
XAML névtérként van definiálva, a System.Collections.Generic
pedig az scg
XAML névtérként van definiálva. A CollectionView.ItemsSource
tulajdonság egy olyan List<T>
-re van beállítva, amely Monkey
típusú argumentummal van példányosítva. A List<Monkey>
gyűjtemény több Monkey
elemet tartalmaz, és az egyes Monkey
objektumok megjelenését meghatározó DataTemplate a CollectionViewItemTemplate
-ként van beállítva.
Több típusargumentum
Több típusargumentum is megadható előtagú sztringargumentumként, vesszővel elválasztva, a x:TypeArguments
direktíva használatával. Ha egy általános kényszer általános típusokat használ, a beágyazott kényszertípus argumentumai zárójelben találhatók:
<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
Ebben a példában a GenericsDemo.Models
az models
XAML névtérként van definiálva, a System.Collections.Generic
pedig az scg
XAML névtérként van definiálva. A CollectionView.ItemsSource
tulajdonság egy List<T>
van beállítva, amely KeyValuePair<TKey, TValue>
korlátozással van létrehozva, a belső kényszertípus argumentumai string
és Monkey
. A List<KeyValuePair<string,Monkey>>
gyűjtemény egy nem alapértelmezett KeyValuePair
konstruktor használatával van inicializálva több KeyValuePair
elemmel, és az egyes Monkey
objektumok megjelenését meghatározó DataTemplate be van állítva a CollectionViewItemTemplate
-ként. Az argumentumok nem alapértelmezett konstruktornak való átadásáról további információt a Konstruktor argumentumainak átadásacímű témakörben talál.