我在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)
將不起作用)?我曾嘗試:
- 獲得所選項目的父節點(例如,分子是分子父節點),但在WPF的TreeVew沒有方法來獲取父節點。
- MyTreeView.Items.Remove(MyTreeView.SelectedItem) - 錯誤:操作是無效的ItemsSource時正在使用
添加在我ItemOfWorld類附加字段:
public ItemOfWorld Parent;
這將像指針的父類中使用。我認爲它可以解決這個問題,如下所示:(MyTreeVew.SelectedItem as ItemOfWorld).Parent.Items.Remove(MyTreeVew.SelectedItem);
但是對於我的應用程序來說,分子的數量將會非常大,所以如果我試圖避免這種「解決方案」會更好,我希望能夠在您的幫助下找到更多智能解決方案也許我必須改變ItemsSource鏈接?任何提示或想法將不勝感激!謝謝!
爲什麼這個工作? MyTreeVew.Items.Remove(MyTreeVew.SelectedItem); – Sajeetharan
因爲我在DataTemplate中使用ItemsSource,所以當我嘗試這樣做時出現錯誤:在ItemsSource正在使用時操作無效 –
@ user3742076因此請將這些信息添加到您的問題中,例如您迄今爲止已經嘗試的內容以及您遇到的問題 –