C# WPB ListBox绑定到类内的控件

C# WPB ListBox绑定到类内的控件,c#,wpf,xaml,data-binding,listbox,C#,Wpf,Xaml,Data Binding,Listbox,我创建了一个WPF网格列表框,如下所示: <ListBox Name="MyListbox" > </ListBox> 我用一个简单的声明在XAML中定义listbox,如下所示: <ListBox Name="MyListbox" > </ListBox> 这很好,一切看起来都是我想要的 现在,我决定在我的列表框中,我还想存储对实际myItem对象的引用,以便以后可以引用它 我的想法是创建一个新类,如: public class ListGr

我创建了一个WPF网格列表框,如下所示:

<ListBox Name="MyListbox" >
</ListBox>
我用一个简单的声明在XAML中定义listbox,如下所示:

<ListBox Name="MyListbox" >
</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对象内部的实际网格


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

您不能只使用网格对象的
标记
属性吗

newGrid.Tag = myItem;
随后:

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

您找不到这方面的文档的原因是不打算这样做。您可以创建绑定到数据的控件,使用项模板来确定数据的显示方式。您不应该像那样动态添加到items控件。不要在代码中创建UI元素。相反,为ListBox项创建一个适当的数据模板。看看MSDN上的文章。实际上这很奇怪,另一种方式(网格中的列表框)是可以理解的。如何处理网格上的蓝色焦点?如果你需要一组网格,可以将它们包装在ItemsControl或StackPanel中。这是一个很好的替代解决方案,对我来说很有效。如果在几天内没有人能解决我最初的想法,我会接受这个。