2

我正在尝试将一个 LINQ 查询的结果绑定ObservableCollection到我的 UI,我似乎让它工作了一半。如果我向 中添加新项目ObservableCollection,我可以引发 CollectionChanged 并在属性上调用 PropertyChanged ,它将更新。不幸的是,修改项目的属性不会导致 CollectionChanged 触发,我不知道如何让它触发。我尝试过其他人发布的方法,例如TrulyObservableColection,但没有成功。有没有办法强制 CollectionChanged 触发?或者在这种情况下我可以采取另一条路线。我宁愿不必放弃 LINQ。任何意见,将不胜感激。

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),我怎样才能达到相同的结果?

4

1 回答 1

0

当一个项目被简单地修改时(例如本例中的 Workers' EmployerID),我怎样才能达到相同的结果?

您需要订阅每个工作人员更改的属性,并PropertyChanged在结果集合上引发适当的事件。

但是,另一种选择是使用WPF 内置的 ICollectionView 过滤,而不是公开单独的属性。

于 2013-07-24T23:31:31.337 回答