2011-09-29 22 views
1

我有一個例程,它解析來自xml提要的數據。當我過濾這個可觀察的集合時,我是否錯過了一些東西?

... 

    matches.Add(_item); 
} 

而在這之後不久我只想包括在此之後我的where子句

if (this.MatchType == FixtureType.Played) 
{ 
    matches = matches.ToList().Where(
     m => 
      m.matchResult == "D" 
    ).ToObservableCollection(); 
} 

匹配它,如果我把一個斷點的項目,我注意到比賽現在包含的項目我正在尋找。

現在的問題是,數據綁定到observablecollection的控件仍然有初步數據。

回答

5

的問題是,在這種情況下

  • 該控件綁定到
  • 你與ToObservableCollection呼叫

中所創建的新原來的2個ObservableCollection實例爲了獲得要在控件中顯示的新結果,您需要將其重新綁定到新的ObservableCollection實例。這或內聯修改原始實例。

var results = matches.Where(m => m.matchResult == "D").ToList(); 
matches.Clear(); 
foreach (var cur in results) { 
    matches.Add(cur); 
} 
+0

工作魅力 –

+0

@HiTechMagic是的,這是一個有效的解決方案。真的,雖然通常最好將集合作爲只讀屬性來完全避免這個問題。 – JaredPar

1

那是因爲你的控制冷藏船到matches舊的實例,你正在創建一個新的觀察的集合和分配,爲matches,但你的控件未綁定到matches變量,但對價值matches有當它被綁定。您應該修改匹配並刪除所有不符合條件的項目。

0

我會問你爲什麼要編程變量綁定到。

使用諸如MVVM Light之類的MVVM框架可以非常好地分類這些場景。

只是在視圖模型中有一個屬性,並綁定你的視圖,當你更新視圖模型時頁面將自動更新,簡單。

有很多這樣的例子,其中包括DEV工具中的數據綁定模板(實現基本的notifypropertychanged行爲),更好的方法是升級到MVVM light(http://mvvmlight.codeplex.com)或者進一步使用喜歡Calburn.Micro(http://caliburnmicro.codeplex.com/)

+0

我需要將我的項目升級到mvvmlight才能正確理解它。 –

相關問題