可绑定LINQ和连续LINQ之间的主要区别是什么?
•Bindable LINQ:www.codeplex.com/bindablelinq
•连续LINQ:www.codeplex.com/clinq
根据提供的反馈添加了另一个项目:
•Obtics:obtics.codeplex.com
Kyl*_*ser 25
这些包试图解决它们的两个问题:缺少CollectionChanged事件和动态结果集.还有一个问题是可绑定的解决方案,附加的自动事件触发器.
两个包旨在解决的第一个问题是:
LINQ查询返回的对象不提供CollectionChanged事件.
连续LINQ会自动对所有查询执行此操作,不做任何更改:
from item in theSource select item ;
Run Code Online (Sandbox Code Playgroud)
当您将.asBindable添加到查询源对象时,Bindable LINQ会执行此操作:
from item in theSource.AsBindable() select item ;
Run Code Online (Sandbox Code Playgroud)
两个包旨在解决的第二个问题是:
从LINQ查询返回的结果集是静态的.
通常,当您执行LINQ查询时,结果集将保持不变,直到您执行新查询.使用这两个包,只要更新源,就会更新结果集.(对性能不利,对实时更新有利)
例
var theSource = new ContinuousCollection<Customer>();
var theResultSet = from item in theSource where item.Age > 25 select item;
//theResultSet.Count would equal 0.
Run Code Online (Sandbox Code Playgroud)
因为你使用可绑定或连续LINQ,你可以修改theSource和theResultSet会自动包含新项目.
theSource.Add(new Customer("Bob", "Barker" , 35, Gender.Male)); //Age == 35
//theResultSet.Count would now equal 1.
Run Code Online (Sandbox Code Playgroud)
LINQ提供的附加问题可绑定:(直接从他们自己的页面引用)
contactsListBox.ItemsSource = from c in customers
where c.Name.StartsWith(textBox1.Text)
select c;
Run Code Online (Sandbox Code Playgroud)
Bindable LINQ将检测到查询依赖于TextBox对象textBox1的Text属性.由于TextBox是WPF控件,因此Bindable LINQ知道在控件上订阅TextChanged事件.
最终结果是,当用户键入时,将重新评估查询中的项目,并在屏幕上显示更改.处理事件不需要其他代码.
要记住的另一件事是,尽管 BindableLinq 需要在 LINQ 语句中调用“.AsBindable()”,但 CLINQ 要求您使用 ContinuousCollection<T> 而不是 ObservableCollection<T>。在简要地查看两者之后,我想我将使用可绑定的 LINQ。
小智 5
的确; 连续 LINQ 的主要问题是无法使用任何实现通用 IEnumerable 和 INotifyCollectionChanged 的集合。Bindable LINQ 使用实现两个接口的自定义集合没有问题。
小智 5
我可以提请你注意另一个codeplex项目吗?它被称为Obtics并处理相同的问题(http://obtics.codeplex.com).
它解决了第一个问题和第二个问题,并将反应性提升到一个非常深的层次(使用基于LINQ的光线跟踪器进行演示).
它声称完全支持所有LINQ语句和Enumerable类的方法.
它使用另一种机制来创建实时查询:
var theResultSet = ExpressionObserver.Execute(
() => from item in theSource where item.Age > 25 select item
).Cascade();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |