Megosztás a következőn keresztül:


Á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:Int32azonban 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.