0

我实际上在我的 Listbox 上显示了我从 XML 检索的项目列表。当我单击一个项目时,我将返回相同的方法并创建一个新列表以显示不同的项目。

我想知道为什么它没有清​​除以前的列表。

这是我使用的代码,我无法弄清楚..

if (e.Error == null)
        {
            // Retrieving the subfolders
            XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
            XNamespace aNamespace = XNamespace.Get("http://schemas.datacontract.org/2004/07/System.IO");

            var folders = from query in xdoc.Descendants(aNamespace.GetName("DirectoryInfo"))
                          select new Folder
                          {
                              Name = (string)query.Element("OriginalPath"),
                          };

            ObservableCollection<Folder> LFolders = new ObservableCollection<Folder>();

            foreach (Folder f in folders)
            {
                LFolders.Add(f);
            }

            listBox1.ItemsSource = LFolders;
            listBox1.SelectionChanged += new SelectionChangedEventHandler(listBox1_SelectionChanged);
        }
4

2 回答 2

1

两个建议:

  1. 考虑使用 MVVM 模式,然后在视图模型上存储和更新 ObservableCollection。
  2. 在 XAML 中设置 SelectionChanged 事件,而不是现在设置它的位置。对于此方法的每次调用,您都将附加一个事件处理程序到您的 listBox1。
于 2012-04-13T17:10:45.470 回答
1

如果在设置新值之前将 Itemssource 设置为 null,我相信这会起作用。此外,您可以尝试将 LFolders 设为类变量。当您开始使用该方法时,请清除该集合,然后将其添加到其中。绑定到列表框的可观察集合将负责更新列表框。

于 2012-04-13T17:15:54.343 回答