0

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

2 つの提案:

  1. MVVM パターンを使用し、代わりにビュー モデルに ObservableCollection を格納して更新することを検討してください。
  2. 現在設定している場所ではなく、XAML で SelectionChanged イベントを設定します。このメソッドを呼び出すたびに、追加のイベント ハンドラーを listBox1 に追加します。
于 2012-04-13T17:10:45.470 に答える
1

新しい値を設定する前に Itemssource を null に設定すると、うまくいくと思います。また、LFolders をクラス変数にしてみることができます。メソッドを開始するときは、コレクションをクリアしてから追加します。リストボックスにバインドされている観察可能なコレクションは、リストボックスの更新を処理します。

于 2012-04-13T17:15:54.343 に答える