嵌套集合绑定

时间:2009-08-20 10:52:40

标签: wpf binding

我想将嵌套集合绑定到网格面板,但不确定我可以动态地执行此操作。

这是我的收藏:

Public class GrandParent
{
    string name;
    Icollection<Parent> ParentCollection;
}

Public class Parent
{
    string lastname;
    Icollection<Child> ChildCollection;
}

Public class Child
{
    string name;
    int age;
}

我想要这样的输出:

GrandParent.Name Parent1.LastName Parent2.LastName Parent3.LastName

GP1儿童[GP1,Parent1.LastName]儿童[GP1,Parent2.LastName]儿童[GP1,Parent3.LastName]
GP2儿童[GP2,Parent1.LastName]儿童[GP2,Parent2.LastName]儿童[GP2,Parent3.LastName]

其中Parent.LastNames是静态的。

截至目前,我的viewmodel类(绑定类)是这样的:

Class viewmodel
{
    collection<string> GrandParentNames
    {
    }

    collection<string> Parent1LastNames
    {
    }

    collection<string> Parent2LastNames
    {
    }

    collection<string> Parent3LastName
    {
    }
}

有人可以建议我更好地接受这个吗?

3 个答案:

答案 0 :(得分:1)

你的问题有点模糊;我不明白你想要绑定到什么...你是什么意思:

  

将嵌套集合绑定到网格面板

我可以马上告诉你,当使用嵌套的数据集合时,你最好的选择是使用HierarchicalDataTemplate。以下是couple examples使用一个。

答案 1 :(得分:0)

嘿查理,看起来我没有把我的问题搞好......对不起......

我的集合是嵌套的,但我想要的输出不是嵌套的..

它应该像......

父属性我想用于标题名称 GranParent Name我想用于First Column 而我想用于其他列的子属性

因此输入是授予父母 - &gt;家长 - &gt;孩子(1对多)

out put是

             --         Parent        --               Parent1

GrandParent.Name - Parent的子级 - Parent1的子级 GrandParent1.Name - Parent的子级 - Parent1的子级

如果我在这里举个例子......

国家/地区 - &gt;指定 - &gt;人(姓名,年龄)

e.g。美国 - 经理 - 人(A,26)       美国 - 首席建筑师 - 人(B,28)      英国 - 经理 - 人(C,26)       英国 - 首席建筑师 - 人(D,28)

**out put is :**

(标题)

国家--- Mangaer ---首席建筑师

(R0w1)


美国--- A,26​​ --- B,28

(R0w2)

英国--- C,26 --- D,28

会欣赏任何线索或代码...

答案 2 :(得分:0)

我只是根据你的名字做出你在wpf中这样做的假设。

在你的代码中,你对模型有正确的想法,但是(假设我理解你的目标是什么)你在ViewModel上误入歧途。因为GrandParent类有一个Parents集合,而Parent就是一个子集合,所以在ViewModel中,您只需要ViewModel中的GrandParrents集合。所以你的ViewModel将更接近:

class ViewModel
    {
        ICollection<GrandParent> Grents;
    }

与您的View一样,我所知道的最简单的方法是通过数据模板。你必须在你的网格中使用一个列表框,但你可以格式化列表框,如何获得你想要的结果,这是WPF的荣耀。无论如何,我在这里做了一个简单的例子:

<Window.Resources>

 <local:ViewModel x:Key="ViewModelDataSource" d:IsDataSource="True"/>
 <DataTemplate x:Key="GrandParents_Data_Template">
  <StackPanel>
<TextBlock Text="{Binding name}"/>
<ListBox ItemsSource="{Binding ParentCollection}" ItemTemplate="{DynamicResource Parents_Data_Template}"/>

     

                          

                          

</Window.Resources>

    

希望这有助于让你至少朝着正确的方向前进。如果您还有其他问题,请与我们联系。