微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在列表视图索引中切换子元素的可见性?

如何解决如何在列表视图索引中切换子元素的可见性?

我正在使用 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>

enter image description here

这就是“布尔值”小节的样子。

enter image description here

这就是“模拟”小节的样子。

有什么方法可以在运行时遍历代码隐藏中的 listView 的每一行并将布尔/模拟的 IsVisible 属性切换为 true?我想让一些行的布尔部分可见,而其他行的模拟部分可见。

解决方法

是的,有。但我认为这不是一个好主意。相反,您可以做的是将 ListView.DataTemplate 拆分为两个单独的文件并使用 DataTemplateSelector

查看这些链接了解更多详情:

Creating a Xamarin.Forms DataTemplate

Creating a Xamarin.Forms DataTemplateSelector

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。