我是 Linq 的新手,刚开始在项目中使用普通绑定和 sql 查询......比我遇到的 Bindable Linq 术语......
有人可以告诉我如何使用它以及它有什么用处吗?用在哪里??
我在 stackoverflow 和许多其他站点中遇到过它的示例,但不知道如何使用它?
如果是的话,我是否必须添加引用才能使用可绑定的 linq?
由于我是新手,请大家帮我解决这个问题..
我是 Linq 的新手,刚开始在项目中使用普通绑定和 sql 查询......比我遇到的 Bindable Linq 术语......
有人可以告诉我如何使用它以及它有什么用处吗?用在哪里??
我在 stackoverflow 和许多其他站点中遇到过它的示例,但不知道如何使用它?
如果是的话,我是否必须添加引用才能使用可绑定的 linq?
由于我是新手,请大家帮我解决这个问题..
可绑定 LINQ 与 WPF/Silverlight(或任何依赖于ObservableCollection<T>
通知 UI 集合更改的任何东西)结合使用时非常有用。
可绑定 LINQ 还尝试检测查询中的 UI 依赖项并绑定到适当的事件,以便当 UI 更改时,无需开发人员编写任何代码即可重新评估您的查询。
Bindable LINQ 的 CodePlex 页面有一个很好的解释:
看看http://clinq.codeplex.com/,它似乎是一个比 Bindable LINQ 更活跃的项目。
在应用程序中,经常会出现需要根据源数据计算某个值的情况。举个简单的例子,现实生活中一切都可以变得更复杂(可绑定的Linq更适用于更复杂的情况)。例如,您需要根据订单中每个产品的原始价格和折扣计算最终价格。如果订单商品(添加、删除)或折扣发生变化,我们还必须更新最终价格。在不使用可绑定 Linq 的情况下,有 2 个选项可以实现此目的:
1) 每次订单商品(添加、删除)或折扣发生变化时,调用重新计算总价的方法。
2)调用定时器重新计算总价的方法(每5秒一次) 这些方法各有缺点。
第一种方法有以下缺点:由于我们必须在代码中很多地方调用重新计算总价的方法,我们可能会忘记在某处调用重新计算总价的方法。第二种方法有以下缺点:
1)UI总价刷新延迟
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 也是如此)。当 Items 集合或 Discount、Quantity、Price 属性更改时,Value 属性会更改。
在这里你可以看到其他类似库的讨论。