在 UWP 中显示列表内部列表

Showing list inside list inside list in UWP

我有 "Register" 个对象的列表。 每个寄存器都有 "Fields" 的列表。 每个字段都有位列表。

对于每个寄存器,我需要显示它的名称、字段名称和字段位列表。

我尝试在 Listiew 中的 ListView 中使用 ListView 来完成。它有效,但是当超过 20 个寄存器时,它变得非常慢并且无法使用它。

然后我尝试使用 DataGrid,但我似乎无法更改其中的值。我找到的所有其他解决方案都太复杂了。

类 是:

public class FieldBit
{
    public bool _bitValue;

    public override string ToString()
    {
        return ((_bitValue) ? 1 : 0).ToString();
    }
}

public class Field
{
    public string name;
    public ObservableCollection<FieldBit> bitsList;

    public override string ToString()
    {
        return name;
    }
}

public class Register
{
    public string name;

    public ObservableCollection<Field> reg_fields = new ObservableCollection<Field>();

}

ListView 方法:

<ListView x:Name="RegistersListView" ItemsSource="{x:Bind registersList}">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="structures:Register">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <TextBlock Text="{x:Bind name}" Grid.Row="0" />

                        <StackPanel Grid.Row="1">
                            <ListView x:Name="FieldsListView" ItemsSource="{x:Bind reg_fields}">
                                <ListView.ItemTemplate>
                                    <DataTemplate x:DataType="structures:Field">
                                        <StackPanel>
                                            <TextBlock Text="{x:Bind name}"/>
                                            <ListView x:Name="BitsListView" ItemsSource="{x:Bind bitsList}" >
                                                <DataTemplate x:DataType="structures:FieldBit">
                                                        <TextBlock Text="{x:Bind _bitValue}"/>
                                                </DataTemplate>
                                                <ListView.ItemsPanel>
                                                    <ItemsPanelTemplate>
                                                        <StackPanel Orientation="Horizontal"/>
                                                    </ItemsPanelTemplate>
                                                </ListView.ItemsPanel>
                                            </ListView>
                                        </StackPanel>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                                <ListView.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel Orientation="Horizontal" />
                                    </ItemsPanelTemplate>
                                </ListView.ItemsPanel>
                            </ListView>
                        </StackPanel>

                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

这是它应该是什么样子的例子:

有没有关于不会卡住屏幕的简单解决方案的想法? 似乎唯一的解决方案是 DataGrid 但我似乎无法正确构建它,DataGrid 中的三重列表的任何示例将不胜感激。 谢谢

所以经过大量的反复试验...

  • TreeView 在 17134 之前的版本中不受支持。即使支持,也并非所有功能都像 WPF 中那样存在。

  • DataGrid 不是内部列表的正确解决方案。

  • 最好的解决办法就是将 ListView 替换为 ListBox。 ListBox 比 ListView 性能好很多,而且几乎没有延迟。