WPB ListBox绑定到类中的控件

时间:2014-09-10 21:30:26

标签: c# wpf xaml data-binding listbox

我有一个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对象中显示实际的网格?

我怀疑这与绑定有关,但我找不到任何以我正在做的方式工作的例子。我发现的大部分内容只显示绑定到对象内的字符串,而不是整个控件。

1 个答案:

答案 0 :(得分:1)

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

newGrid.Tag = myItem;

然后:

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