2013-07-24 51 views
2

我試圖將一個ObservableCollection的LINQ查詢的結果綁定到我的用戶界面,我似乎有一半的工作。如果我向ObservableCollection添加新項目,我可以引發CollectionChanged並在屬性上調用PropertyChanged並更新。不幸的是,修改一個項目的屬性不會導致CollectionChanged觸發,我無法弄清楚如何使它觸發。我嘗試過其他人發佈的方法,例如TrulyObservableColection,但沒有運氣。有沒有辦法強制CollectionChanged啓動?或者在這種情況下我可以採取另一條路線。我寧願不必放棄LINQ。任何意見,將不勝感激。當一個項目的屬性被修改時引發CollectionChanged在ObservableCollection

private ObservableCollection<Worker> _workers = new ObservableCollection<Worker>(); 
public ObservableCollection<Worker> Workers 
{ 
    get { return _workers; } 
} 

public IEnumerable<Worker> WorkersEmployed 
{ 
    get { return GameContainer.Game.Workers.Where(w => w.EmployerID == this.ID); } 
} 

GameContainer.Game.Workers.CollectionChanged += Workers_CollectionChanged; 

private void Workers_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    RaisePropertyChanged(() => WorkersEmployed); 
} 

這個作品呈現新的條目添加到集合中。當一個項目被簡單修改時(如本例中的Workers'EmployerID),我怎麼能達到同樣的結果?

回答

0

我怎樣才能達到同樣的效果,當一個項目被簡單地修改(如工人在這種情況下EmployerID)?

您需要訂閱每個工作人員更改的屬性,然後在生成的集合上提高相應的PropertyChanged事件。

但是,另一種選擇是使用WPF's built in ICollectionView filtering而不是暴露單獨的屬性。

+0

工作者通過MVVM Light實現'Observable Object'。 –

+0

@ReedCopsey我想,OP想要的是自動查看WorkerEmployed集合上的EmployerID的更改(例如[Linq to ObservableCollection](http://linq2obscollection.codeplex.com/)或[Bindable LINQ](http: //bindablelinq.codeplex.com/))。 –

+0

我可能不得不再次查看「ICollectionView」。我前一段時間對它進行了探索,但從我記憶中,我從未找到過自動刷新的方法。我正在尋找更「放手」的方法。但是,如果有自動更新/自動刷新ICollectionView的方法,請告訴我。我會在心跳中轉向那個。 –

相關問題