【发布时间】:2017-05-16 14:45:41
【问题描述】:
我正在处理一个 WPF 项目,试图从 ImpactElement 对象中获取信息。该对象位于称为 ElementList 的 ObservableCollection 中。这个 ElementList 位于另一个名为 ListOfCreatedStacks 的 ObservableCollection 中,它保存着 Class Stack 的对象。
它只显示来自 ElementList 中的元素 (ImpactElement) 的 toString。我希望从 ElementList 中的每个元素中显示 ImpactElements 变量 ElementMark。
这就是它现在的样子One element added in the ElementList
我可以创建任意数量的堆栈,并且在每个堆栈内都有一个具有不同数量 ImpactElement 的 ElementList。 Two stacks with different amount of ImpactElements in the ElementList
从这些图片中,您可以看到 ElementList 中的每个 ImpactElement 都显示为“IMPACT_Visual_Stacker.Model.ImpactElement”,但我希望它是 ImpactElement 类中的变量 ElementMark。
这是来自不同类的代码。
public class Controller
{
public ObservableCollection<Stack> ListOfCreatedStacks { get { return listOfCreatedStacks; } set { listOfCreatedStacks = value; } }
}
public class Stack
{
public ObservableCollection<ImpactElement> ElementList { get { return elementList; } set { elementList = value; } }
public string Id { get { return id; } set { id = value; } }
}
public class ImpactElement
{
private string elementMark;
private int id;
private Vector3 sizeLWH;
private Vector3 positionXYZ;
private Vector3 rotationXYZ;
private Mesh elementMesh;
}
这是 XAML 部分。
<ListView ItemsSource="{Binding ListOfCreatedStacks}" HorizontalAlignment="Left" Margin="350, 200,0,0" Width="300">
<ListView.ItemTemplate>
<DataTemplate>
<TreeViewItem
Header="{Binding Id}"
IsExpanded="True">
<TreeViewItem
ItemsSource="{Binding ElementList}" Header="{Binding ElementMark}" IsExpanded="True">
</TreeViewItem>
</TreeViewItem>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我尝试了从 Ed 那里得到的另一个 StackOverflow 的解决方案。 结果最终只添加了一个包含我的“ImpactElement”对象的 Hiarchy 对象。
这是经过测试的 XAML 的样子:
<ListView ItemsSource="{Binding ListOfCreatedStacks}" HorizontalAlignment="Left" Margin="350, 200,0,0" Width="300">
<ListView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type System:String}"
ItemsSource="{Binding ListOfCreatedStacks}">
<TreeViewItem
Header="{Binding Id}"
IsExpanded="True">
<HierarchicalDataTemplate DataType="{x:Type System:String}"
ItemsSource="{Binding ElementList}">
<TreeViewItem
Header="{Binding ElementMark}"
IsExpanded="True">
</TreeViewItem>
</HierarchicalDataTemplate>
</TreeViewItem>
</HierarchicalDataTemplate>
</ListView.ItemTemplate>
</ListView>
感觉像是错过了一些我不明白的简单部分。感谢您的帮助。
【问题讨论】:
-
感谢 Ed 的回复。在那个问题上这是一个很好的答案。由于我没有相同的孩子和父母而不是 Hierachy,我不知道如何应用它?
-
使用 HierarchicalDataTemplate。如果您无法根据自己的需要修改该答案,请就您遇到麻烦的地方提出另一个问题。如果您不愿意尝试,我很抱歉,但我帮不了您。
-
嗨,埃德。我已经从您发送的答案中尝试了解决方案。我无法让它工作。我更新了原始问题。你看到我想念什么了吗?
-
你为什么要将
TreeViewItem嵌套在ListView而不是TreeView中?
标签: c# wpf treeviewitem