2011-05-03 131 views
0

我正在使用wpf樹視圖並將ItemsSource綁定到具有IsChecked屬性的ViewModel的IEnumerable。我使用TwoWay模式將複選框綁定到此值。當我檢查複選框時,我可以看到當我單步執行程序時,它正在ViewModel上正確設置此值。WPF TreeView ItemsSource不保留值

然後我有一個菜單項「運行檢查」。在這個方法中,我有一個foreach循環,它通過ItemsSource運行,如同ViewModel的IEnumerable一樣,尋找IsChecked = true來排隊由獨立程序運行的檢查項。因此:

foreach (AccountViewModel account in tvClientList.ItemsSource as IEnumerable<AccountViewModel>) 
       { 
        if (account.IsChecked) 
        { 
         context.Queues.InsertOnSubmit(new Queue {Id = account.Id}); 
        } 
       } 

但是,account.IsChecked始終爲false。爲什麼是這樣?

回答

0

只爲其他人遇到此問題。 ItemsSource返回一組新的數據,但是包含當前的一組數據。

0

我會檢查以下內容。

  1. 是否在單擊treeview複選框時調用AccountViewModel.Ischecked的設置程序。如果沒有 - 那麼問題是如果是的話,你應該看看你的收藏綁定。

  2. 調試你的foreach並檢查treeviewitemssource是你期望的集合。

也許你可以發佈你的綁定,如果這一切都沒有幫助。

ps:如果你使用viewmodels/mvvm,不要直接訪問你的View控件。

+0

1和2,都使用調試器進行檢查。我能想到的唯一的事情是,當我使用tvClientList.ItemSource時,它會重新查詢連接到的IEnumerable的Linq。 – light 2011-05-03 17:23:08