Generika
.NET Multi-platform App UI (.NET MAUI) XAML poskytuje podporu pro využívání obecných typů CLR zadáním obecných omezení jako argumentů typu. Tato podpora je poskytována direktivou x:TypeArguments
, která předává argumenty omezujícího typu obecného konstruktoru obecného typu.
Argumenty typu jsou zadány jako řetězec a obvykle mají předponu, například sys:String
a sys:Int32
. Předpona je povinná, protože typické typy obecných omezení CLR pocházejí z knihoven, které nejsou namapované na výchozí obory názvů .NET MAUI. Integrované typy XAML 2009, jako jsou například x:String
a x:Int32
, je však možné zadat také jako argumenty typu, kde x
je obor názvů jazyka XAML pro XAML 2009. Další informace o předdefinovaných typech XAML 2009 naleznete v tématu XAML 2009 Language Primitives.
Důležitý
Definování obecných typů v .NET MAUI XAML s direktivou x:TypeArguments
není podporováno.
Více argumentů typu lze zadat pomocí oddělovače čárky. Kromě toho platí, že pokud obecné omezení používá obecné typy, měly by být argumenty vnořeného typu omezení obsaženy v závorkách.
Poznámka
Rozšíření značkovacího modulu x:Type
poskytuje referenci typu CLR (Common Language Runtime) pro generický typ a má podobnou funkci jako operátor typeof
v jazyce C#. Další informace naleznete v části x:Type markupu.
Informace o zadávání obecných typů v .NET MAUI XAML s direktivami x:DataType
a x:Type
naleznete v tématu Kompilace vazeb, které určují obecný typ a rozšíření značek x:Type.
Argument jednoho primitivního typu
Jeden argument primitivního typu lze zadat jako předponu řetězcového argumentu pomocí direktivy x:TypeArguments
:
<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>
V tomto příkladu je System.Collections.Generic
definován jako obor názvů XAML scg
. Vlastnost CollectionView.ItemsSource
je nastavena na List<T>
, která je vytvořena pomocí argumentu typu string
a využívá integrovaný typ XAML 2009 x:String
. Kolekce List<string>
se inicializuje s několika položkami string
.
Alternativně, ale ekvivalentně, lze kolekci List<T>
instanciovat s typem String
modulu CLR.
<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 typu jednoho objektu
Argument typu jednoho objektu lze zadat jako předponu řetězcového argumentu pomocí direktivy x:TypeArguments
:
<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>
V tomto příkladu je GenericsDemo.Models
definován jako models
obor názvů XAML a System.Collections.Generic
je definován jako scg
obor názvů XAML. Vlastnost CollectionView.ItemsSource
je nastavena na List<T>
, která je vytvořena s typovým argumentem Monkey
. Kolekce List<Monkey>
je inicializována s více položkami Monkey
, a DataTemplate, která definuje vzhled každého objektu Monkey
, je nastavena jako ItemTemplate
u CollectionView.
Více argumentů typu
Více argumentů typu lze zadat jako řetězcové argumenty s předponou, oddělené čárkou, pomocí direktivy x:TypeArguments
. Pokud obecné omezení používá obecné typy, jsou argumenty vnořeného typu omezení obsaženy v závorkách:
<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
V tomto příkladu je GenericsDemo.Models
definován jako models
obor názvů XAML a System.Collections.Generic
je definován jako scg
obor názvů XAML. Vlastnost CollectionView.ItemsSource
je nastavena na List<T>
, která je vytvořena s omezením KeyValuePair<TKey, TValue>
, s argumenty typu vnitřního omezení string
a Monkey
. Kolekce List<KeyValuePair<string,Monkey>>
je inicializována s více položkami KeyValuePair
pomocí konstruktoru KeyValuePair
, který není výchozí, a DataTemplate, který definuje vzhled každého objektu Monkey
, je nastavený jako ItemTemplate
CollectionView. Informace o předávání argumentů do jiného než výchozího konstruktoru najdete v tématu Předání argumentů konstruktoru.