我有“注册”对象列表。 每个寄存器都有“字段”列表。 每个字段都有位列表。
对于每个寄存器,我需要显示其名称,其字段名称以及其字段位列表。
我试图用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中三元列表的任何示例将不胜感激。 谢谢。
答案 0 :(得分:0)
因此,经过大量的反复试验...
17134之前的版本不支持TreeView。即使支持它,也不像WPF中那样存在所有功能。
DataGrid不是内部列表的正确解决方案。
最好的解决方案是将ListView替换为ListBox。 ListBox的性能比ListView好得多,并且几乎没有延迟。