Genel Tanımlar/Jenerik İlaçlar
.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) XAML, genel kısıtlamaları tür bağımsız değişkenleri olarak belirterek genel CLR türlerini kullanma desteği sağlar. Bu destek, bir genelin kısıtlayıcı tür bağımsız değişkenlerini, genel türün oluşturucusuna geçiren x:TypeArguments
yönergesi tarafından sağlanır.
Tür bağımsız değişkenleri bir dize olarak belirtilir ve genellikle sys:String
ve sys:Int32
gibi öneklerle belirtilir. CLR'nin tipik genel kısıtlama türleri, varsayılan .NET MAUI ad alanlarına eşlenmeyen kütüphanelerden geldiği için öneklendirme gereklidir. Ancak, x:String
ve x:Int32
gibi XAML 2009 yerleşik türleri de tür bağımsız değişkenleri olarak belirtilebilir; burada x
XAML 2009 için XAML dil ad alanıdır. XAML 2009 yerleşik türleri hakkında daha fazla bilgi için bkz. XAML 2009 Dil Temel Bilgileri.
Önemli
.NET MAUI XAML'de x:TypeArguments
yönergesi ile genel türlerin tanımlanması desteklenmez.
Birden çok tür bağımsız değişkeni virgül sınırlayıcı kullanılarak belirtilebilir. Ayrıca, genel bir kısıtlama genel türler kullanıyorsa, iç içe kısıtlama türü bağımsız değişkenleri parantez içinde bulunmalıdır.
Not
x:Type
işaretleme uzantısı, genel bir tür için Ortak Dil Çalışma Zamanı (CLR) türü başvurusu sağlar ve C# içindeki typeof
işlecine benzer bir işleve sahiptir. Daha fazla bilgi için bkz. x:Type biçimlendirme uzantısı.
.NET MAUI XAML'de x:DataType
ve x:Type
yönergeleriyle genel türler belirtme hakkında bilgi için bkz. genel tür belirten derleme bağlamaları ve x:Type işaretleme uzantısı.
Tek temel tür bağımsız değişkeni
Tek bir ilkel tür argümanı, x:TypeArguments
yönergesini kullanarak ön ekli bir dize argümanı şeklinde belirtilebilir.
<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>
Bu örnekte, System.Collections.Generic
scg
XAML ad alanı olarak tanımlanır.
CollectionView.ItemsSource
özelliği, XAML 2009 yerleşik x:String
türü kullanılarak string
türü bağımsız değişkeniyle oluşturulmuş bir List<T>
'e ayarlandı.
List<string>
koleksiyonu birden çok string
öğesiyle başlatılır.
Alternatif olarak, ancak eşdeğer olarak, List<T>
koleksiyonu CLR String
türüyle örneklenebilir:
<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>
Tek nesne türü bağımsız değişkeni
Tek bir nesne türü bağımsız değişkeni, x:TypeArguments
yönergesi kullanılarak ön ekli dize bağımsız değişkeni olarak belirtilebilir:
<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>
Bu örnekte, GenericsDemo.Models
models
XAML ad alanı olarak tanımlanır ve System.Collections.Generic
scg
XAML ad alanı olarak tanımlanır.
CollectionView.ItemsSource
özelliği, Monkey
türü bağımsız değişkeniyle oluşturulmuş bir List<T>
olarak ayarlanır.
List<Monkey>
koleksiyonu birden çok Monkey
öğesiyle başlatılır ve her Monkey
nesnesinin görünümünü tanımlayan bir DataTemplate, CollectionView'ün ItemTemplate
'ü olarak ayarlanır.
Birden çok tür bağımsız değişkeni
Birden çok tür bağımsız değişkeni, x:TypeArguments
yönergesi kullanılarak virgülle ayrılmış ön ekli dize bağımsız değişkenleri olarak belirtilebilir. Genel bir kısıtlama genel türler kullandığında, iç içe geçmiş kısıtlama türünün bağımsız değişkenleri parantez içine alınır.
<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
Bu örnekte, GenericsDemo.Models
models
XAML ad alanı olarak tanımlanır ve System.Collections.Generic
scg
XAML ad alanı olarak tanımlanır.
CollectionView.ItemsSource
özelliği, string
ve Monkey
iç kısıtlama türü bağımsız değişkenlerine sahip KeyValuePair<TKey, TValue>
kısıtlaması ile örneklenen bir List<T>
olarak ayarlanır.
List<KeyValuePair<string,Monkey>>
koleksiyonu, varsayılan olmayan KeyValuePair
oluşturucu kullanılarak birden çok KeyValuePair
öğesiyle başlatılır. Her Monkey
nesnesinin görünümünü tanımlayan bir DataTemplate ise, CollectionView'nın ItemTemplate
'i olarak ayarlanır. Bağımsız değişkenleri varsayılan olmayan bir oluşturucuya geçirme hakkında bilgi için bkz. oluşturucuya bağımsız değişken geçirme.