【发布时间】:2020-02-06 14:27:54
【问题描述】:
我想将如下所示的数据结构绑定到 ListView 或类似组件。想要的结果如下图所示。
public struct Info
{
public string Port;
public byte FwVersion;
public byte ApiVersion;
public byte BootVersion;
public char[] BoardId;
public char[] AfeId;
public AfeType AfeType;
}
我知道可以将结构内容放入对象数组,然后将此数组绑定到 ListView,但我更愿意在 xaml 中定义 ListView 行名并直接绑定到底层结构,例如:
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" />
<GridViewColumn Header="Value" Width="240" />
</GridView>
<ListView.View>
<ListViewItem>
<ListViewColumn Column="1">Serial port</ListViewColumn>
<ListViewColumn Column="2">{Binding MyStructure.Port}</ListViewColumn>
</ListViewItem>
<ListViewItem>
<ListViewColumn Column="1">Board ID</ListViewColumn>
<ListViewColumn Column="2">{Binding MyStructure.BoardId}</ListViewColumn>
</ListViewItem>
...
</ListView>
不幸的是,我不知道如何在 xaml 中定义“硬编码”行。
感谢您的想法。
【问题讨论】:
-
首先,使用公共属性而不是字段,否则数据绑定将不起作用。还可以考虑使用类而不是结构,以防您希望能够在某些时候编辑项目。
-
@Clemens:你说得对,不幸的是结构是由 API 生成器生成的,因此改变它并不容易。也许使用一些包装器或转换器?
-
以下是 Microsoft 文档解决此问题的方法:docs.microsoft.com/en-us/archive/msdn-magazine/2008/july/…