在UWP中的列表内列表中显示列表

时间:2019-05-16 14:30:55

标签: c# xaml uwp uwp-xaml

我有“注册”对象列表。 每个寄存器都有“字段”列表。 每个字段都有位列表。

对于每个寄存器,我需要显示其名称,其字段名称以及其字段位列表。

我试图用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>

这里是示例,其外观应为: enter image description here

有什么想法可以解决我的屏幕问题吗? 似乎唯一的解决方案是DataGrid,但我似乎无法正确构建它,DataGrid中三元列表的任何示例将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

因此,经过大量的反复试验...

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

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

  • 最好的解决方案是将ListView替换为ListBox。 ListBox的性能比ListView好得多,并且几乎没有延迟。