C# 列表框刷新和绑定wp7

C# 列表框刷新和绑定wp7,c#,windows-phone-7,binding,C#,Windows Phone 7,Binding,实际上,我在我的列表框中显示了从XML检索的项目列表。当我点击一个项目时,我将返回到相同的方法,并创建一个新的列表来显示不同的项目 我想知道为什么它没有清除之前的列表 这是我用的代码,我搞不懂 if (e.Error == null) { // Retrieving the subfolders XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);

实际上,我在我的列表框中显示了从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);
        }
if(e.Error==null)
{
//检索子文件夹
XDocument xdoc=XDocument.Parse(例如,Result,LoadOptions.None);
XNamespace aNamespace=XNamespace.Get(“http://schemas.datacontract.org/2004/07/System.IO");
var folders=来自xdoc.subjects中的查询(aNamespace.GetName(“DirectoryInfo”))
选择新文件夹
{
Name=(string)query.Element(“OriginalPath”),
};
ObservableCollection LFolders=新的ObservableCollection();
foreach(文件夹中的文件夹f)
{
l增加(f);
}
listBox1.ItemsSource=L文件夹;
listBox1.SelectionChanged+=新的SelectionChangedEventHandler(listBox1\u SelectionChanged);
}
两条建议:

  • 考虑使用MVVM模式,然后在视图模型上存储和更新ObservableCollection
  • 在XAML中设置SelectionChanged事件,而不是现在设置它的位置。对于此方法的每次调用,都会向listBox1追加一个额外的事件处理程序

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

    对于第二个答案,我应该做什么?我的意思是,我已经添加了一个事件句柄,只需在XAML中设置它,然后在代码隐藏中删除您要设置它的地方。现在它被设置在代码后面的for循环中,所以它被设置了多次。