Отображение списка внутри списка внутри списка в UWP - PullRequest
0 голосов
/ 16 мая 2019

У меня есть список объектов "Регистрация"каждый регистр имеет список «полей».у каждого поля есть список битов.

для каждого регистра мне нужно показать его имя, имя его поля и список битов его полей.

Я попытался сделать это с помощью ListView внутри ListView внутри Listiew.,Это сработало, но когда больше 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 голосов
/ 19 мая 2019

Так что после большого количества проб и ошибок ...

  • TreeView не поддерживается в версиях, предшествующих 17134. Даже если это поддерживается, не все функции существуют, как в WPF.

  • DataGrid не является правильным решением для внутренних списков.

  • Лучшим решением было просто заменить ListView на ListBox.ListBox намного лучше, чем ListView, и практически не задерживается.

...