TextBlock
我的UI 中有一个绑定到.Count()
属性的扩展。我想将 LINQ 过滤添加到属性中,但是当我这样做时,它会破坏绑定。
这可以正常工作并更新 UI 没有任何问题:
public IEnumerable<Worker> WorkersTest
{
get
{
return DataManager.Data.Workers;
}
}
添加 LINQ 筛选后,WorkersTest
不会更新TextBlock
,尽管 MessageBox 确认属性正在被修改。但是,在初始化数据时,值会正确显示:
public IEnumerable<Worker> WorkersTest
{
get
{
return DataManager.Data.Workers.Where(w => w.Gender == Gender.Male);
}
}
有没有办法在不破坏绑定的情况下保持 LINQ 过滤?
更新:我需要澄清的一件事DataManager.Data.Workers
是ObservableCollection
.
据我所知,任何 LINQ 操作都会破坏绑定AsEnumerable()
,但 没有任何效果。
此外,针对安德烈斯的回答,Count()
这不是问题所在。如果我将此属性绑定到 a DataGrid
,我会得到相同的结果。使用 LINQ,它不会更新。没有 LINQ,它确实如此。是否有任何解决方法,最好是不涉及ICollectionView
或任何类似性质的解决方法?
更新:有人知道 LINQ 扩展(例如Where
在使用时是否返回新对象)吗?我无法在网上找到任何有关此的文档。但是,如果是这种情况,那可能就是问题所在。
更新:我插入了一个断点,发现了一些可能有用的有趣信息:
没有 LINQ:
使用 LINQ:
也许这可以揭示真正发生的事情,并希望让我更接近解决方案。
我是否正确假设CollectionChanged
并且PropertyChanged
为 null 是问题的根源?如果是这样,我该怎么做才能解决这个问题?