微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可绑定的Linq有什么好处?

如何解决可绑定的Linq有什么好处?

| 我是Linq的新手,刚开始在项目中使用它们进行常规绑定和SQL查询... 比我碰到可绑定的Linq词.. 有人可以告诉我如何使用它以及如何有用吗? 在哪里使用? 我在stackoverflow和许多其他站点中遇到了它的示例,但是找不到如何使用它? 如果是,我是否必须添加引用以使用可绑定的linq? 当我是新手时,请帮我解决这个问题。     

解决方法

当与WPF / Silverlight(或依赖于ѭ0来通知UI集合更改的任何东西)一起使用时,可绑定LINQ很有用。 可绑定的LINQ还会尝试检测查询中的UI依赖性并将其绑定到适当的事件,以便在UI更改时,您的查询将被重新评估,而开发人员无需编写任何代码。 Bindable LINQ的CodePlex页面有一个很好的解释: Codeplex-可绑定的LINQ     ,看一下http://clinq.codeplex.com/,它似乎比Bindable LINQ更为活跃。     ,在应用程序中,经常会出现一种情况,即有必要根据源数据计算一些值。让我举一个简单的例子,在现实生活中,一切都可能更加复杂(可绑定的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;
	}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。