问题描述
我正在使用 Xamarin.Forms 制作 UWP 应用程序。以下代码是 XAML 的一个片段。此页面包含显示解析的 JSON 数据的列表视图。
<ListView x:Name="listView"
ItemTapped="ItemTapped"
Style="{StaticResource openPagelistView}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame Padding="0,40,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,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"
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,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>
这就是“布尔值”小节的样子。
这就是“模拟”小节的样子。
有什么方法可以在运行时遍历代码隐藏中的 listView 的每一行并将布尔/模拟的 IsVisible 属性切换为 true?我想让一些行的布尔部分可见,而其他行的模拟部分可见。
解决方法
是的,有。但我认为这不是一个好主意。相反,您可以做的是将 ListView.DataTemplate 拆分为两个单独的文件并使用 DataTemplateSelector
查看这些链接了解更多详情: