1

我是 Linq 的新手,刚开始在项目中使用普通绑定和 sql 查询......比我遇到的 Bindable Linq 术语......

有人可以告诉我如何使用它以及它有什么用处吗?用在哪里??

我在 stackoverflow 和许多其他站点中遇到过它的示例,但不知道如何使用它?

如果是的话,我是否必须添加引用才能使用可绑定的 linq?

由于我是新手,请大家帮我解决这个问题..

4

3 回答 3

2

可绑定 LINQ 与 WPF/Silverlight(或任何依赖于ObservableCollection<T>通知 UI 集合更改的任何东西)结合使用时非常有用。

可绑定 LINQ 还尝试检测查询中的 UI 依赖项并绑定到适当的事件,以便当 UI 更改时,无需开发人员编写任何代码即可重新评估您的查询。

Bindable LINQ 的 CodePlex 页面有一个很好的解释:

Codeplex - 可绑定的 LINQ

于 2011-04-13T15:20:24.150 回答
0

看看http://clinq.codeplex.com/,它似乎是一个比 Bindable LINQ 更活跃的项目。

于 2011-04-13T15:34:34.030 回答
0

在应用程序中,经常会出现需要根据源数据计算某个值的情况。举个简单的例子,现实生活中一切都可以变得更复杂(可绑定的Linq更适用于更复杂的情况)。例如,您需要根据订单中每个产品的原始价格和折扣计算最终价格。如果订单商品(添加、删除)或折扣发生变化,我们还必须更新最终价格。在不使用可绑定 Linq 的情况下,有 2 个选项可以实现此目的:

1) 每次订单商品(添加、删除)或折扣发生变化时,调用重新计算总价的方法。

2)调用定时器重新计算总价的方法(每5秒一次) 这些方法各有缺点。

第一种方法有以下缺点:由于我们必须在代码中很多地方调用重新计算总价的方法,我们可能会忘记在某处调用重新计算总价的方法。第二种方法有以下缺点:

1)UI总价刷新延迟

2) 当订单的组成和折扣没有改变时,重新计算最终价格的方法将被调用,这会对性能产生不利影响

这两种方法都有以下缺点:每次重新计算最终价格的方法都会重新计算整个计算(枚举所有订单项目),而不是考虑一个项目的单独变化。这会对性能产生不利影响。使用可绑定的 Linq,我们只需要

1) 确定最终价格的计算方式

2) 使用 INotifyPropertyChangedINotifyCollectionChanged接口。

我想向您介绍我的实现这种方法的库: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 属性会更改。

在这里你可以看到其他类似库的讨论。

于 2019-11-21T10:49:12.827 回答