我有一个DataItem列表。
DataItem有一个RowId,ColumnId和Value。
这些数据项基本上描述了用户可定义的“表”的内容。
现在我需要将这些数据绑定到数据网格,使其代表“表”。即,DataItem值应使用RowId和ColumnId显示在网格中。
非常感谢任何有关此绑定问题的帮助。
答案 0 :(得分:1)
如果您想使用绑定,则需要ItemsControl
,例如ListBox
,并修改其ItemsPanelTemplate
以使用Grid
。如果您不知道列数和行数,遗憾的是您必须从代码中手动生成它们。或者完全实现自己的Panel
。
这是样本。如果基础模型不是XML,则必须从XPath更改所有绑定。
<Window x:Class="CoordBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<XmlDataProvider x:Key="_items">
<x:XData>
<Items xmlns="">
<Item ColId="1" RowId="2">Blah</Item>
<Item ColId="0" RowId="1">Doh</Item>
<Item ColId="2" RowId="0">Meh</Item>
</Items>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource _items},XPath=Items/*}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid IsItemsHost="True">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Grid.Row" Value="{Binding XPath=@RowId}" />
<Setter Property="Grid.Column" Value="{Binding XPath=@ColId}" />
</Style>
</ListBox.Resources>
</ListBox>
</Window>
答案 1 :(得分:0)
好吧,这可能不是最“理想”的方法(我更喜欢在XAML中使用它),但这里有一些东西可以帮助你入门。此代码以名为Items的List和名为ItemsGrid的<_p>声明的Grid开头
int maxRow = Items.Select(i => i.RowId).Max();
int maxCol = Items.Select(i => i.ColumnId).Max();
for (int i = 0; i <= maxRow; i++)
ItemsGrid.RowDefinitions.Add(new RowDefinition());
for (int i = 0; i <= maxCol; i++)
ItemsGrid.ColumnDefinitions.Add(new ColumnDefinition());
foreach (var item in Items)
{
TextBlock newItem = new TextBlock() { Text = item.Value };
ItemsGrid.Children.Add(newItem);
Grid.SetRow(newItem, item.RowId);
Grid.SetColumn(newItem, item.ColumnId);
}
或者,您可以查看实际的DataGrid控件,而不是现在在.NET Framework中使用的内容。
WPF工具包有一个我在几个项目中成功使用的DataGrid: http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
第三方供应商也生产simimlar网格。突出的是Xceed,Telerik,Infragistics和Syncfusion。没有特别的顺序。
希望有所帮助! 添