我有一个WPF ListBox of Grids,我创建如下:
我在XAML中使用一个简单的声明来定义列表框,如下所示:
<ListBox Name="MyListbox" >
</ListBox>
在代码中,我动态创建任意数量的Grid项(System.Windows.Controls.Grid),然后将它们添加到ListBox中。类似的东西:
foreach (MyDataType myItem in MyDataList)
{
Grid newGrid = new Grid();
// Code that sets the properties and values of the grid, based on myItem
MyListbox.Items.Add(newGrid);
}
这很好用,一切看起来都是我想要的方式。
现在,我已经决定在我的ListBox中,我还想存储对实际myItem对象的引用,以便稍后可以引用它。
我的想法是创建一个新类,如:
public class ListGridItemNode
{
public MyDataType theItem;
public Grid theGrid;
public ListGridItemNode(MyDataType inItem, Grid inGrid)
{
theItem = inItem;
theGrid = inGrid;
}
}
然后将我的代码更改为:
foreach (MyDataType myItem in MyDataList)
{
Grid newGrid = new Grid();
// Code that sets the properties and values of the grid, based on myItem
MyListbox.Items.Add(new ListGridItemNode(myItem,newGrid));
}
当然,现在我的列表框而不是显示网格,只显示文本“MyApp.ListGridItemNode”。
我的问题是:如何告诉ListBox更深层次并在每个ListGridItemNode对象中显示实际的网格?
我怀疑这与绑定有关,但我找不到任何以我正在做的方式工作的例子。我发现的大部分内容只显示绑定到对象内的字符串,而不是整个控件。
答案 0 :(得分:1)
难道你不能只使用Grid对象的Tag
属性吗?
newGrid.Tag = myItem;
然后:
Grid grid; // obtain Grid object somehow
MyItem myItem = (MyItem) grid.Tag;