在 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 性能好很多,而且几乎没有延迟。
我有 "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 性能好很多,而且几乎没有延迟。