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对象内部的实际网格?

我怀疑这与绑定有关,但我找不到任何像我这样工作的例子。我发现的大多数例子只显示绑定到对象中的字符串,而不是整个控件。

WPB ListBox绑定到类内的控件

不能只使用Grid对象的Tag属性吗?

newGrid.Tag = myItem;

随后:

Grid grid; // obtain Grid object somehow
MyItem myItem = (MyItem) grid.Tag;