#c# #xamarin #xamarin.forms #uwp
Вопрос:
Я создаю приложение UWP с помощью Xamarin.Формы. Следующий код представляет собой фрагмент кода XAML. Эта страница содержит представление списка, в котором отображаются проанализированные данные JSON.
<ListView x:Name="listView"
ItemTapped="ItemTapped"
Style="{StaticResource openpageListView}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame Padding="0, 40, 0, 40">
<StackLayout HorizontalOptions="CenterAndExpand"
VerticalOptions="StartAndExpand">
<StackLayout Orientation="Horizontal"
HeightRequest="30"
WidthRequest="750"
HorizontalOptions="CenterAndExpand"
VerticalOptions="Start">
<Label Text="Topic: "
TextColor="White"
FontAttributes="Bold"
HorizontalOptions="StartAndExpand"/>
<Label Text="{Binding Topic}"
HorizontalOptions="StartAndExpand"/>
<Label Text="Input Type / Output Type: "
TextColor="White"
FontAttributes="Bold"
HorizontalOptions="EndAndExpand" />
<Label HorizontalOptions="EndAndExpand">
<Label.Text>
<MultiBinding StringFormat="{}{0} => {1}">
<Binding Path="InputType" />
<Binding Path="OutputType" />
</MultiBinding>
</Label.Text>
</Label>
</StackLayout>
<!-- Boolean specific subsection -->
<Grid x:Name="boolean"
IsVisible="false"
Padding="0, 15, 0, 15"
RowSpacing="15"
ColumnSpacing="15"
HorizontalOptions="CenterAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="205" />
<ColumnDefinition Width="205" />
<ColumnDefinition Width="205" />
</Grid.ColumnDefinitions>
<StackLayout Orientation="Horizontal" Grid.Column="0" Grid.Row="0">
<Label Text="Default: "
TextColor="White"
FontAttributes="Bold"/>
<Label Text="{Binding Default}" />
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Column="1" Grid.Row="0">
<Label Text="Invert: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding Invert}" />
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Column="2" Grid.Row="0">
<Label Text="Button / Axis ID: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding ButtonId}" />
</StackLayout>
</Grid>
<!-- Analog Specific Subsection -->
<StackLayout x:Name="analog"
WidthRequest="750"
IsVisible="true">
<Grid Padding="0, 15, 0, 15"
RowSpacing="15"
ColumnSpacing="50"
HorizontalOptions="CenterAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="0">
<Label Text="Button / Axis ID: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding AxisId}" />
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="1">
<Label Text="Clamp: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding Clamp}" />
</StackLayout>
</Grid>
<Grid Padding="0, 0, 0, 15"
RowSpacing="15"
ColumnSpacing="50"
HorizontalOptions="CenterAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="205" />
<ColumnDefinition Width="205" />
<ColumnDefinition Width="205" />
</Grid.ColumnDefinitions>
<StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="0">
<Label Text="Default: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding Default}" />
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="1">
<Label Text="Scalar: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding Scalar}" />
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="2">
<Label Text="Bias: "
TextColor="White"
FontAttributes="Bold" />
<Label Text="{Binding Bias}" />
</StackLayout>
</Grid>
</StackLayout>
Вот как выглядит подраздел «логическое значение».
Вот как выглядит подраздел «аналог».
Есть ли какой-либо способ перебрать каждую строку представления списка в коде во время выполнения и включить свойство isVisible логического/аналогового значения, чтобы оно было истинным? Я хочу сделать так, чтобы в некоторых строках был виден логический раздел, а в других строках был виден аналоговый раздел.
Ответ №1:
Да, есть. Но я не думаю, что это хорошая идея. Вместо этого вы можете разделить свой ListView.DataTemplate на два отдельных файла и использовать DataTemplateSelector
Смотрите эти ссылки для получения более подробной информации: