2012-04-13 13 views
0

私は実際にリストボックスにXMLから取得したアイテムのリストを表示します。アイテムをクリックすると、同じメソッドに戻り、別のアイテムで表示する新しいリストを作成します。リストボックスの更新とバインディングwp7

私はなぜそれが前のリストをクリアしていないのだろうと思っています。

これは私が使用するコードですが、私はこれを把握することはできません。..

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); 
     } 

答えて

1

つの提案:

  1. MVVMパターンを使用して、その後にあなたのObservableCollectionを格納し、更新を検討モデルを代わりに表示します。
  2. SelectionChangedイベントを設定する場所ではなく、XAMLで設定します。このメソッドを呼び出すたびに、listBox1に追加のイベントハンドラが追加されます。
+0

答え番号2については、どうすればよいですか?つまり、私は既にイベントハンドラを追加しています。 – Kiwimoisi

+0

XAMLで設定して、どこにコードを設定するのかを削除します。今は、コードの中のforループに設定されているので、複数回設定されています。 – KodeKreachor

0

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

関連する問題