WPB ListBox绑定到类内的控件
本文关键字:控件 ListBox 绑定 WPB | 更新日期: 2023-09-27 18:21:21
我有一个网格的WPF ListBox,我创建如下:
我用一个简单的声明在XAML中定义列表框,如下所示:
<ListBox Name="MyListbox" >
</ListBox>
在代码中,我动态地创建任意数量的网格项(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对象内部的实际网格?
我怀疑这与绑定有关,但我找不到任何像我这样工作的例子。我发现的大多数例子只显示绑定到对象中的字符串,而不是整个控件。
不能只使用Grid对象的Tag
属性吗?
newGrid.Tag = myItem;
随后:
Grid grid; // obtain Grid object somehow
MyItem myItem = (MyItem) grid.Tag;