我想将嵌套集合绑定到网格面板,但不确定我可以动态地执行此操作。
这是我的收藏:
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
{
}
}
有人可以建议我更好地接受这个吗?
答案 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 ---首席建筑师
美国--- A,26 --- B,28
英国--- 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>
希望这有助于让你至少朝着正确的方向前进。如果您还有其他问题,请与我们联系。