XAML 'de Genel türler Xamarin.Forms

Örnek indir Örneği indirin

Xamarin.Forms XAML, genel kısıtlamaları tür bağımsız değişkenleri olarak belirterek genel CLR türlerini tüketmeye yönelik destek sağlar. Bu destek, x:TypeArguments bir genel türün kısıtlayan tür bağımsız değişkenlerini genel türün oluşturucusuna geçiren yönergesi tarafından sağlanır.

Önemli

XAML 'de, Xamarin.Forms yönergeyle birlikte genel sınıfları tanımlama x:TypeArguments desteklenmez.

Tür bağımsız değişkenleri bir dize olarak belirtilir ve genellikle önekli, sys:String ve gibi sys:Int32 . CLR genel kısıtlamalarının tipik türleri varsayılan ad alanıyla eşlenmemiş kitaplıklardan geldiğinden, önek olarak gereklidir Xamarin.Forms . Ancak, ve gibi XAML 2009 yerleşik türleri x:Stringx:Int32 de tür bağımsız değişkenleri olarak belirtilebilir; burada x XAML 2009 için XAML dili ad alanıdır. XAML 2009 yerleşik türleri hakkında daha fazla bilgi için bkz. xaml 2009 dil temelleri.

Birden çok tür bağımsız değişkeni, bir virgül sınırlayıcısı kullanılarak belirtilebilir. Ayrıca, genel bir kısıtlama genel türler kullanıyorsa, iç içe geçmiş kısıtlama türü bağımsız değişkenleri parantez içinde bulunmalıdır.

Not

x:TypeBiçimlendirme uzantısı, genel bir tür IÇIN clr türü başvurusu sağlar ve typeof C# ' deki işlece benzer bir Işleve sahiptir. Daha fazla bilgi için bkz. X:Type işaretleme uzantısı.

Tek ilkel tür bağımsız değişkeni

Tek bir temel tür bağımsız değişkeni, yönergesi kullanılarak önekli dize bağımsız değişkeni olarak belirtilebilir x:TypeArguments :

<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>

Bu örnekte, System.Collections.Genericscg xaml ad alanı olarak tanımlanmıştır. CollectionView.ItemsSourceÖzelliği, List<T>string XAML 2009 yerleşik türü kullanılarak bir tür bağımsız değişkeni ile örneği oluşturulmuş olarak ayarlanır x:String . List<string>Koleksiyon birden çok öğe ile başlatıldı string .

Alternatif olarak, equivalently, List<T> koleksıyon clr String türüyle oluşturulabilir:

<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>

Tek nesne türü bağımsız değişkeni

Tek bir nesne türü bağımsız değişkeni, yönergesi kullanılarak önekli dize bağımsız değişkeni olarak belirtilebilir x:TypeArguments :

<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>

Bu örnekte, GenericsDemo.Modelsmodels xaml ad alanı olarak tanımlanmıştır ve System.Collections.Genericscg xaml ad alanı olarak tanımlanmıştır. Özelliği, bir CollectionView.ItemsSourceList<T> tür bağımsız değişkeniyle örneği oluşturulan bir olarak ayarlanır Monkey . List<Monkey>Koleksiyon birden çok Monkey öğeyle başlatılır ve her bir nesnenin görünümünü tanımlayan bir öğesi, ' DataTemplateMonkey nin öğesi olarak ayarlanır ItemTemplateCollectionView .

Birden çok tür bağımsız değişkeni

Birden çok tür bağımsız değişkeni, bir virgülle ayrılmış olarak, ' yi kullanarak, ön ek dize bağımsız değişkenleri olarak belirtilebilir x:TypeArguments . Genel kısıtlama genel türler kullandığında, iç içe geçmiş kısıtlama türü bağımsız değişkenleri parantez içinde bulunur:

<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    

Bu örnekte, GenericsDemo.Modelsmodels xaml ad alanı olarak tanımlanmıştır ve System.Collections.Genericscg xaml ad alanı olarak tanımlanmıştır. CollectionView.ItemsSourceÖzelliği, List<T>KeyValuePair<TKey, TValue> iç kısıtlama türü bağımsız değişkenleri ve ile bir kısıtlaması ile örneği oluşturulmuş olarak ayarlanır stringMonkey . List<KeyValuePair<string,Monkey>>Koleksiyon, KeyValuePair varsayılan olmayan oluşturucuyu kullanarak birden çok öğe ile başlatılır KeyValuePair ve DataTemplate her bir nesnenin görünümünü tanımlayan bir öğesi MonkeyItemTemplateCollectionView . Bağımsız değişkenleri varsayılan olmayan bir oluşturucuya geçirme hakkında daha fazla bilgi için bkz. Oluşturucu bağımsız değişkenlerini geçirme.