【发布时间】:2015-03-20 23:38:40
【问题描述】:
我的 XAML 中有一个带有 HierarchicalDataTemplate 的树视图设置,如下所示:
<TreeView Grid.Column="1" Grid.Row="0" ItemsSource="{Binding treeViewObsCollection}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding mainNodes}">
<TextBlock Text="{Binding topNodeName}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding subItemName}"></TextBlock>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是设置为 XAML 文件的数据上下文的 ViewModel。
class AdvancedErrorCalculationViewModel : ViewModelBase
{
static ObservableCollection<TreeViewClass> _treeViewObsCollection = new ObservableCollection<TreeViewClass>();
public static ObservableCollection<TreeViewClass> treeViewObsCollection { get { return _treeViewObsCollection; } }
public class TreeViewClass : ViewModelBase
{
public TreeViewClass(string passedTopNodeName)
{
topNodeName = passedTopNodeName;
mainNodes = new ObservableCollection<TreeViewSubItems>();
}
public string topNodeName
{
get { return this.GetValue<string>(); }
set { this.SetValue(value); }
}
public ObservableCollection<TreeViewSubItems> mainNodes { get; private set; }
}
public class TreeViewSubItems : ViewModelBase
{
public TreeViewSubItems(string passedSubItemName, string passedSubItemJobStatus)
{
subItemName = passedSubItemName;
subItemJobStatus = passedSubItemJobStatus;
}
public string subItemName
{
get { return this.GetValue<string>(); }
set { this.SetValue(value); }
}
public string subItemJobStatus
{
get { return this.GetValue<string>(); }
set { this.SetValue(value); }
}
}
public static void AddTreeViewItems(string passedTopNodeName, string passedChildItemName, string passedChildItemJobStatus)
{
treeViewObsCollection.Add(new TreeViewClass(passedTopNodeName)
{
mainNodes =
{
new TreeViewSubItems(passedChildItemName, passedChildItemJobStatus)
}
});
}
}
问题在于上面看到的AddTreeViewItems 方法。目前,如果我通过假设调用该方法:
AdvancedErrorCalculationViewModel.AddTreeViewItems("Parent","Child 1", "Completed");
它可以很好地创建父节点和子节点。那里没有问题。
但是,如果我再次使用相同的 Parent 名称但不同的 Child 调用该方法;例如: AdvancedErrorCalculationViewModel.AddTreeViewItems("Parent","Child 2", "Completed");
它使用子节点 Child 2 创建一个新的父节点。因此,我有这样的事情:
- Parent
- Child 1
- Parent
- Child 2
我想修改这个函数,如果父节点名称相同,子节点应该属于前一个父节点而不是新的父节点。像这样的:
- Parent
- Child 1
- Child 2
我整天都在尝试寻找有关 stackoverflow 的解决方案,但似乎找不到任何适合我的问题的解决方案。谁能帮我修改我的代码以检测父节点是否已经存在于 observablecollection 中,如果存在,请将子节点放在现有父节点下?
谢谢提前。 :)
【问题讨论】:
标签: c# wpf mvvm treeview observablecollection