带列表的WPF树视图

带列表的WPF树视图,wpf,list,treeview,Wpf,List,Treeview,我是WPF的新手,遇到了一个问题。 我必须为一个模型实现一个GUI。 在这个模型中有括号、文档、表格和图像。 每个括号可以容纳更多的括号或文档。每一份文件都可以存放纸张。每张纸上都有图像。每个元素在一个列表中保存子元素。 所以一个括号有一个括号和文档的列表,文档一个表格的列表。。。 因此,我有一个用于此结构的HierarchycalDataTemplate,它可以正常工作 但是现在我想编辑数据(移动或删除一些项目),我不知道如何告诉树更新 我现在使用ObservableCollection,并将

我是WPF的新手,遇到了一个问题。 我必须为一个模型实现一个GUI。 在这个模型中有括号、文档、表格和图像。 每个括号可以容纳更多的括号或文档。每一份文件都可以存放纸张。每张纸上都有图像。每个元素在一个列表中保存子元素。 所以一个括号有一个括号和文档的列表,文档一个表格的列表。。。 因此,我有一个用于此结构的HierarchycalDataTemplate,它可以正常工作

但是现在我想编辑数据(移动或删除一些项目),我不知道如何告诉树更新

我现在使用ObservableCollection,并将其用作根括号(因为将它们放在其中没有问题),但我不想遍历每个括号、每个文档和每个工作表,并在通往ObservableCollection的路上列出每个列表

我可以通知我的树关于变更的信息吗?比如在一个工作表列表中

我的观点(不是所有,但重要的事情)


阿列夫宁
Nach Oben
视图模型:

//每个括号创建新文档,每个文档在构造函数中创建新图纸

private ObservableCollection<Bracket> m_Brackets;
      public TreeViewModel()
      {
         m_Brackets = new ObservableCollection<Bracket>();
         m_Brackets.Add(new Bracket());
         if (m_Brackets[0] != null)
         {
            m_Brackets[0].Brackets.Add(new Bracket(m_Brackets[0].Id));
         }
         m_Brackets.Add(new Bracket());
      }
private observedcollection mu括号;
公共树视图模型()
{
m_方括号=新的ObservableCollection();
m_括号。添加(新括号());
如果(m_括号[0]!=null)
{
m_方括号[0]。方括号。添加(新方括号(m_方括号[0]。Id));
}
m_括号。添加(新括号());
}
因此,当我删除m_括号/文档中的工作表时,什么都没有发生。 我试图调用RaisePropertyChanged(“Sheets”),但什么都没有

当我调用Tree.Items.Refresh()时,一切都很好,但我认为这是不可能的,或者

谢谢你的帮助
Daniel

如果您希望树自身更新,那么您别无选择,只能始终使用ObservableCollections


您的
RaisePropertyChanged(“Sheets”)
将被忽略,因为WPF足够聪明,可以比较对象引用以查看它是否真的发生了更改。您没有提到如何存储sheet etc集合,但为了使用手动属性更改事件查看任何更新,您必须将整个集合换成一个新集合。

谢谢,我将尝试使用ObservableCollection实现所有更新。我认为这是最简单(也许也是唯一)的方法。谢谢你的帮助
private ObservableCollection<Bracket> m_Brackets;
      public TreeViewModel()
      {
         m_Brackets = new ObservableCollection<Bracket>();
         m_Brackets.Add(new Bracket());
         if (m_Brackets[0] != null)
         {
            m_Brackets[0].Brackets.Add(new Bracket(m_Brackets[0].Id));
         }
         m_Brackets.Add(new Bracket());
      }