我是WPF的新手,所以你可以发现我的问题有点奇怪。 想象一下,我们有一些课程:
public class ItemOfWorld
{
public ObservableCollection<ItemOfWorld> Items { get; set; }
public string Name { get; set; }
public virtual void AddItem() { }
public ItemOfWorld()
{
this.Items = new ObservableCollection<ItemOfWorld>();
}
}
public class Molecules : ItemOfWorld
{
public Molecules(): base()
{
Name = "Molecules";
}
public override void AddItem()
{
this.Items.Add(new Molecule());
}
}
然后我在TreeVew中有HierarchicalDataTemplate,如下所示:
HierarchicalDataTemplate DataType="{x:Type pcsadd:ItemOfWorld}" ItemsSource="{Binding Items}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Items.Count}" Foreground="Blue" />
</StackPanel>
</HierarchicalDataTemplate>
问题是:如何删除SelectedItem的对象(在这种情况下使用ItemOfWorld&#39;类型,因此MyTreeView.Items.Remove(MyTreeView.SelectedItem)
将不起作用)?我试过了:
在我的ItemOfWorld类中添加其他字段:public ItemOfWorld Parent;
,它将像指向父类的指针一样使用。我认为它可以像这样解决这个问题:(MyTreeVew.SelectedItem as ItemOfWorld).Parent.Items.Remove(MyTreeVew.SelectedItem);
但是对于我的应用,分子的数量会非常大,所以如果我试图避免这种&#34;解决方案会更好。我希望能在你的帮助下找到更智能的解决方案!
也许我必须以某种方式更改ItemsSource链接?任何提示或想法将不胜感激!谢谢!
答案 0 :(得分:0)
直接从ObservableCollection
删除您的项目:
Items.Remove(MyTreeView.SelectedItem);
答案 1 :(得分:-1)
好的,伙计们,我想我找到了解决这个问题的方法。主要思想 - 在WPF-TreeView中,一些方法确实缺失,没有理由。所以,我们必须设计它。我找到了好人,他已经写了一些额外的扩展方法:thank you, mister Reinhard Ostermeier!。他的图书馆提供了将父项目送到其他项目的可能性。
但我有一个问题。没关系,如果我会在每个孩子中保留指向父类的指针?在这种情况下,我的意思是向ItemOfWorld类添加字段(参见问题№3):public ItemOfWorld Parent
。如果我们试图比较这两个解决方案(内存使用,速度等) - 什么更好?