Я не мог воспроизвести любую проблему с TreeView.Items.Clear()
. Ниже приведен код, который я добавил в новый проект приложения Silverlight в Visual Web Developer Express:
MainPage.xaml (содержимое корневого элемента <UserControl>
):
<StackPanel>
<Button Content="1" Click="Button1_Click" />
<Button Content="2" Click="Button2_Click" />
<sdk:TreeView x:Name="docTreeView" />
</StackPanel>
MainPage.xaml.cs (ниже MainPage()
конструктор):
private void Button1_Click(object sender, System.Windows.RoutedEventArgs e)
{
List<TreeViewItem> items3 = new List<TreeViewItem>() { new TreeViewItem() { Header = "1.b.i" }, new TreeViewItem() { Header = "1.b.ii" }, new TreeViewItem() { Header = "1.b.iii" } };
List<TreeViewItem> items2 = new List<TreeViewItem>() { new TreeViewItem() { Header = "1.a" }, new TreeViewItem() { Header = "1.b" }, new TreeViewItem() { Header = "1.c" } };
items3.ForEach(item => items2[1].Items.Add(item));
List<TreeViewItem> items1 = new List<TreeViewItem>() { new TreeViewItem() { Header = "1" }, new TreeViewItem() { Header = "2" }, new TreeViewItem() { Header = "3" } };
items2.ForEach(item => items1[0].Items.Add(item));
docTreeView.Items.Clear();
items1.ForEach(item => docTreeView.Items.Add(item));
}
private void Button2_Click(object sender, System.Windows.RoutedEventArgs e)
{
List<TreeViewItem> items3 = new List<TreeViewItem>() { new TreeViewItem() { Header = "TWO.B.I" }, new TreeViewItem() { Header = "TWO.B.II" }, new TreeViewItem() { Header = "TWO.B.III" } };
List<TreeViewItem> items2 = new List<TreeViewItem>() { new TreeViewItem() { Header = "TWO.A" }, new TreeViewItem() { Header = "TWO.B" }, new TreeViewItem() { Header = "TWO.C" } };
items3.ForEach(item => items2[1].Items.Add(item));
List<TreeViewItem> items1 = new List<TreeViewItem>() { new TreeViewItem() { Header = "ONE" }, new TreeViewItem() { Header = "TWO" }, new TreeViewItem() { Header = "THREE" } };
items2.ForEach(item => items1[1].Items.Add(item));
docTreeView.Items.Clear();
items1.ForEach(item => docTreeView.Items.Add(item));
}
Одна вещь, которой вы не поделились, - это XAML, который вы используете для отображения TreeView. Вы случайно не связали ItemsSource
дерева в вашей XAML с чем-то, не так ли? (Я говорю это потому, что вы упоминаете, что вызов ClearValue
на ItemsSourceProperty
, кажется, исправит ваши проблемы, и это наводит меня на мысль, что для этого свойства есть привязка. Однако я понимаю, что остальная часть вашего кода собирает дерево в коде позади, присваивая свойству Items
.)
Между прочим, следующий цикл (в RemoveTreeViewSubItems
) не будет работать, если tvi.Items
уже пуст:
For Each sub_tvi As TreeViewItem In tvi.Items
tvi.Items.Remove(sub_tvi)
tvi.UpdateLayout()
Next
Вы не можете удалять элементы из коллекции, поскольку выполняете итерации по ней. Если вы попытаетесь это сделать, вы получите сообщение об ошибке «Операция недействительна из-за текущего состояния объекта».