我需要能够支持 XamDataGrid,它在设计时不会有一定数量的列。例如,应用程序将运行,从服务器获取一些数据并创建一些对象。根据服务器的响应,每次运行应用程序时可能会有不同数量的对象。
这是我的意思的一个例子。假设我调用某个服务并返回带有一些信息的 xml 响应。我将该响应反序列化为多个对象,每次调用时这些对象都可能不同。
假设每个对象都有两个属性:Label 和 Value。我希望网格显示带有标签的列,这些标签与“标签”的值与“值”中的值相匹配。因此,如果我有两个对象 obj1 和 obj2,则如下所示:
obj1.Label = "Parts"
obj1.Value = "17"
obj2.Label = "Parts"
obj2.Value = "12"
我想要一个看起来像这样的网格,有两行:
Parts
17
12
如果我将数据源绑定到网格,网格会自动使用对象的属性来创建列,因此我会看到“标签”和“值”的列:
标签值
第 17 部分
第 12 部分
我假设我无法仅通过 xaml 实现我想要的目标。有人有我正在寻找的例子吗?是否只能由我在运行时以编程方式创建所有列?
<Grid>
<DataGrid Name="dgTest" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=ItemsSource[0].Label}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Value}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
和代码:
public partial class Window12 : Window
{
public Window12()
{
InitializeComponent();
List<MyClass> l = new List<MyClass>();
l.Add(new MyClass
{
Label = "Parts",
Value = "17"
});
l.Add(new MyClass
{
Label = "Parts",
Value = "12"
});
dgTest.ItemsSource = l;
}
}
public class MyClass
{
public string Label { get; set; }
public string Value { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)