我是Linq的新手刚开始在正常绑定和sql查询的项目中使用... 比我遇到过Bindable Linq这个词......
有人能告诉我如何使用它以及它有用吗? 在哪里使用??
我在stackoverflow和许多其他网站上遇到过它的例子但是却找不到如何使用它?
如果是,那么我是否必须添加引用以使用可绑定的linq?
由于我是新手,Pleas的家伙帮我解决了这个问题。
答案 0 :(得分:2)
可绑定LINQ与WPF / Silverlight(或依赖于ObservableCollection<T>
的任何内容一起使用时,可以向UI通知集合的更改)非常有用。
Bindable LINQ还尝试检测查询中的UI依赖项并绑定到相应的事件,以便在UI更改时,重新评估查询,而开发人员不必编写任何代码。
Bindable LINQ的CodePlex页面有一个非常好的解释:
答案 1 :(得分:0)
看看http://clinq.codeplex.com/,它看起来比Bindable LINQ更活跃。
答案 2 :(得分:0)
在应用程序中,经常会出现一种情况,即有必要根据源数据计算某些值。让我举一个简单的例子,在现实生活中,一切都可能更加复杂(可绑定的Linq更适用于更复杂的情况)。例如,您需要根据原始价格和订单中每种产品的折扣来计算最终价格。如果订单商品(添加,删除)或折扣发生变化,我们还必须更新最终价格。不使用可绑定的Linq,有两种方法可以实现:
1)每次订购商品(添加,删除)或折扣更改时,调用重新计算总价的方法。
2)调用计时器重新计算总价的方法(每5秒一次) 这些方法都有缺点。
第一种方法具有以下缺点:由于必须在代码中的许多地方调用重新计算总价的方法,因此我们可能忘记在某处调用重新计算总价的方法。 第二种方法具有以下缺点:
1)延迟刷新用户界面中的总价
2)当订单的组成和折扣没有变化时,徒劳地调用重新计算最终价格的方法,这会对性能产生不利影响
这两种方法都有以下缺点:每次重新计算最终价格的方法都会重新进行整个计算(枚举所有订购商品),而不是考虑单个商品的单独更改。这会对性能产生不利影响。 使用可绑定的Linq,我们只需要
1)确定最终价格的计算方式
2)使用INotifyPropertyChanged和INotifyCollectionChanged接口。
我想向您介绍实现这种方法的图书馆:ObservableComputations。有了这个库,我们可以这样编写代码:
public class Order : INotifyPropertyChanged
{
public ObservableCollection<OrderItem> Items {get; set;}
private int _discount;
public int Discount
{
get => _discount;
set
{
_discount = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Discount)));
}
}
private Computing<decimal> _totalPrice;
public Computing<decimal> TotalPrice => _totalPrice = _totalPrice ??
Items.Selecting(i => i.Price * i.Quantity).Summarizing()
.Using(totalOriginalPrice =>
totalOriginalPrice.Value
- totalOriginalPrice.Value * Discount / 100);
public event PropertyChangedEventHandler PropertyChanged;
}
public class OrderItem : INotifyPropertyChanged
{
private decimal _price;
public decimal Price
{
get => _price;
set
{
_price = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Price)));
}
}
private int _quantity;
public int Quantity
{
get => _quantity;
set
{
_price = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Quantity)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
我们需要的实际值存储在TotalPrice.Value中。 TotalPrice返回INotifyPropertyChanged的实例,并在Value属性更改时通知您,因此您可以将此属性绑定到WPF Xamarin的控件(我相信Blazor也是如此)。当项目收集或折扣,数量,价格属性更改时,值属性也会更改。
Here,您可以看到其他类似库的讨论。