Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Xamarin.Forms XAML обеспечивает поддержку использования универсальных типов СРЕДЫ CLR путем указания универсальных ограничений в качестве аргументов типа. Эта поддержка обеспечивается x:TypeArguments директивой, которая передает аргументы типа ограничения универсального конструктору универсального типа универсального типа.
Внимание
Определение универсальных классов в Xamarin.Forms XAML с x:TypeArguments директивой не поддерживается.
Аргументы типа указываются в виде строки и обычно префиксируются, например sys:String и sys:Int32. Префикс требуется, так как типичные типы универсальных ограничений СРЕДЫ CLR приходят из библиотек, которые не сопоставлены с пространством имен по умолчанию Xamarin.Forms . Однако встроенные типы XAML 2009, такие как x:String и x:Int32, также могут быть указаны в качестве аргументов типа, где x находится пространство имен языка XAML для XAML 2009. Дополнительные сведения о встроенных типах XAML 2009 см. в статье XAML 2009 Language Primitives.
Несколько аргументов типа можно указать с помощью разделителя-запятой. Кроме того, если универсальное ограничение использует универсальные типы, аргументы типа вложенных ограничений должны содержаться в скобках.
Примечание.
Расширение x:Type разметки предоставляет ссылку на тип CLR для универсального типа и имеет аналогичную функцию typeof оператора в C#. Дополнительные сведения см. в расширении разметки x:Type.
Аргумент одного примитивного типа
Один аргумент типа примитива можно указать как префиксный строковый аргумент с помощью директивы 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>
В этом примере System.Collections.Generic определяется как scg пространство имен XAML. Для CollectionView.ItemsSource свойства задано List<T> значение, созданное с аргументом string типа, с помощью встроенного x:String типа XAML 2009. Коллекция List<string> инициализирована с несколькими string элементами.
Кроме того, кроме того, List<T> можно создать экземпляр коллекции с помощью типа CLR String :
<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>
Аргумент типа одного объекта
Один аргумент типа объекта можно указать как префиксный строковый аргумент с помощью директивы 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>
В этом примере GenericsDemo.Models определяется как models пространство имен XAML и System.Collections.Generic определяется как scg пространство имен XAML. Для CollectionView.ItemsSource свойства задано List<T> значение, созданное с помощью аргумента Monkey типа. Коллекция List<Monkey> инициализируется с несколькими Monkey элементами, и DataTemplate определяет внешний вид каждого Monkey объекта в качестве ItemTemplate объекта CollectionView.
Аргументы нескольких типов
Несколько аргументов типа можно указать как префиксированные строковые аргументы, разделенные запятой, с помощью 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="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
В этом примере GenericsDemo.Models определяется как models пространство имен XAML и System.Collections.Generic определяется как scg пространство имен XAML. Для CollectionView.ItemsSource свойства задано List<T> значение, созданное с KeyValuePair<TKey, TValue> помощью ограничения, с аргументами string типа внутреннего ограничения и Monkey. Коллекция List<KeyValuePair<string,Monkey>> инициализируется с несколькими KeyValuePair элементами, используя конструктор, отличный от по умолчанию KeyValuePair , и определяет DataTemplate внешний вид каждого Monkey объекта в качестве ItemTemplate CollectionViewэлемента. Сведения о передаче аргументов конструктору, отличному от по умолчанию, см. в разделе "Передача аргументов конструктора".