2014-06-15 99 views
0

我在WPF中有點新,所以你可以發現我的問題有點奇怪。 試想一下,我們有一些類:如何使用ItemsSource刪除WPF-treeview中的項目?

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()); 
    } 
} 

然後,我有HierarchicalDataTemplate在TreeVew這樣的:

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的類型,所以MyTreeView.Items.Remove(MyTreeView.SelectedItem)將不起作用)?我曾嘗試:

  1. 獲得所選項目的父節點(例如,分子是分子父節點),但在WPF的TreeVew沒有方法來獲取父節點。
  2. MyTreeView.Items.Remove(MyTreeView.SelectedItem) - 錯誤:操作是無效的ItemsSource時正在使用
  3. 添加在我ItemOfWorld類附加字段:public ItemOfWorld Parent;這將像指針的父類中使用。我認爲它可以解決這個問題,如下所示:(MyTreeVew.SelectedItem as ItemOfWorld).Parent.Items.Remove(MyTreeVew.SelectedItem);但是對於我的應用程序來說,分子的數量將會非常大,所以如果我試圖避免這種「解決方案」會更好,我希望能夠在您的幫助下找到更多智能解決方案

    也許我必須改變ItemsSource鏈接?任何提示或想法將不勝感激!謝謝!

+0

爲什麼這個工作? MyTreeVew.Items.Remove(MyTreeVew.SelectedItem); – Sajeetharan

+0

因爲我在DataTemplate中使用ItemsSource,所以當我嘗試這樣做時出現錯誤:在ItemsSource正在使用時操作無效 –

+0

@ user3742076因此請將這些信息添加到您的問題中,例如您迄今爲止已經嘗試的內容以及您遇到的問題 –

回答

0

ObservableCollection直接刪除您的項目:

Items.Remove(MyTreeView.SelectedItem); 
+0

是的,我同意,但事情是我沒有linnear收集。我必須找到父項ItemOfWorld,它有我的SelectedItem並直接刪除它。那麼我怎麼才能找到SelectedItem的父項 - 在WPF-TreeView中沒有這樣的方法...用循環和Items.Count()寫我自己的方法不是好主意.. –

+0

你有沒有對ObservableCollection '填充你的'TreeView'? –

+0

是的,我有'使用System.Collections.ObjectModel;'如果我理解你是正確的) –

-1

好吧,夥計們,我想我發現了這個問題的解決方案。主要思想 - 在WPF-TreeView中有些方法真的很缺失,沒有理由。所以,我們必須設計它。我找到了一個好人,他已經寫了一些額外的擴展方法:thank you, mister Reinhard Ostermeier!。他的圖書館提供了將父項目交給其他項目的可能性。

但我有一個問題。沒關係,如果我會在每個孩子中保留指向父類的指針?在這種情況下,我的意思是添加字段ItemOfWorld類(見問題3):public ItemOfWorld Parent。如果我們試圖比較這兩種解決方案(內存使用,速度等) - 哪種更好?