这两个包都试图解决两个问题:缺少 CollectionChanged 事件和动态结果集。还有一个额外的问题可绑定解决,额外的自动事件触发器。
第一个问题这两个软件包旨在解决的是:
LINQ 查询返回的对象
不提供 CollectionChanged 事件。
Continuous LINQ 自动对所有查询执行此操作,没有任何变化:
from item in theSource select item ;
Bindable LINQ 在您将 .asBindable 添加到查询源对象时执行此操作:
from item in theSource.AsBindable() select item ;
第二个问题这两个软件包旨在解决的是:
从 LINQ 查询返回的结果集
是静态的。
通常,当您执行 LINQ 查询时,您的 结果集 不会改变,直到您执行新查询。使用这两个包,您的 result set 会在 source 更新时更新。 (对性能不利,对实时更新有利)
示例
var theSource = new ContinuousCollection<Customer>();
var theResultSet = from item in theSource where item.Age > 25 select item;
//theResultSet.Count would equal 0.
由于您使用 Bindable 或 Continuous LINQ,您可以修改 theSource,theResultSet 会自动包含新项目。
theSource.Add(new Customer("Bob", "Barker" , 35, Gender.Male)); //Age == 35
//theResultSet.Count would now equal 1.
附加问题 可绑定 LINQ 提供:(直接从他们自己的页面引用)
contactsListBox.ItemsSource = from c in customers
where c.Name.StartsWith(textBox1.Text)
select c;
可绑定 LINQ 将检测到
查询依赖于 Text 属性
TextBox 对象,textBox1。自从
TextBox 是一个 WPF 控件,可绑定
LINQ 知道订阅
控件上的 TextChanged 事件。
最终结果是作为用户
类型,查询中的项目是
重新评估,变化出现在
屏幕。不需要额外的代码
处理事件。