总和

2017-02-13 18 views
0

假设这个基类总和

public class Contrat_Paye_Item 
    { 
     public int  CPI_TYPE { get; set; } 
     public string CPI_TEXT { get; set; } 
     public decimal CPI_AMOUNT { get; set; } 
    } 

在我看来,型号我已经作出了列表从该类这样的:

private ObservableCollection<Contrat_Paye_Item> listapayer; 
public ObservableCollection<Contrat_Paye_Item> ListaPayer 
{ 
    get 
    { 
     return listapayer; 
    } 
    set 
    { 
     listapayer = value; 
     OnPropertyChanged("ListaPayer"); 
    } 
} 

,并在虚拟机的构造,只是一些TESTDATA:

listapayer.Add(new Contrat_Paye_Item() 
        { 
         CPI_TYPE = 0, 
         CPI_TEXT = "Loyer", 
         CPI_AMOUNT = 100 
        }); 


listapayer.Add(new Contrat_Paye_Item() 
        { 
         CPI_TYPE = 1, 
         CPI_TEXT = "charge 1", 
         CPI_AMOUNT = 200 
        }); 

listapayer.Add(new Contrat_Paye_Item() 
        { 
         CPI_TYPE = 1, 
         CPI_TEXT = "Charges 2", 
         CPI_AMOUNT = 300 
        }); 

这样的完整列表包含3项,总量为600

在我的视图模型

我添加了一个只有他们的CPI_type = 1,并结合其项目列表框的子列表没有问题是这样的:

public ICollectionView ListCharges 
     { 
      get 
      { 


       var sub= new CollectionViewSource { Source = listapayer }.View; 
       sub.Filter = p => (p as Contrat_Paye_Item).CPI_TYPE == 1; 
       return sub; 
      } 
     } 

现在我想显示什么是我的项目清单,其中一行包含总和项目的子列表。一个它绑定到第二个列表框

类似:

劳尔100名

费500

任何想法,技巧是值得欢迎的。 感谢

回答

0

如何将这样的事情在返回前分:

 var d1 = (from a in sub.SourceCollection.OfType<Contrat_Paye_Item>() where a.CPI_TEXT == "Loyer" select a.CPI_AMOUNT).Sum(); 
     var d2 = (from a in sub.SourceCollection.OfType<Contrat_Paye_Item>() where a.CPI_TEXT.ToLower().StartsWith("charge") select a.CPI_AMOUNT).Sum(); 

     sub.AddNewItem(new Contrat_Paye_Item() { CPI_TEXT="Sum Loyer", CPI_AMOUNT = d1}); 
     sub.CommitNew(); 
     sub.AddNewItem(new Contrat_Paye_Item() { CPI_TEXT = "Sum Charges", CPI_AMOUNT = d2 }); 
     sub.CommitNew(); 

//编辑

注意这是一个更灵活的可能性:

不要使用_CollectionViewSource _。相反,使用以下作为列表框的ItemsSource

 public ObservableCollection<Contrat_Paye_Item> ListCharges 
    { 
     get 
     { 
      return new ObservableCollection<Contrat_Paye_Item>((from a in listapayer where a.CPI_TYPE == 1 select a)); 
     } 
    } 
+0

感谢的人,这会在我的情况下工作,因为我刚才一个非常小的记录,以便重建总和名单不是我的问题。 我认为这是一个现在的解决方案,但:) – user2475096

+0

这将是很好,如果它使用可观察模式, 我没有提到的代码清晰度,但实际上我使用INotifyPropertyChanged模式既为类和列表。 ObserableCollection是一个修改后的一个名为NotifyPropertyChanged从这个线程 http://stackoverflow.com/questions/8490533/notify-observablecollection-when-item-changes 它允许通知项目的变化以及,所以我们可以更新摘要和像 – user2475096

+0

这样的事情,所以使用INotifyPropertyChanged和CollectionChanged的解决方案会更有用。 和暗示这将是伟大的。 ps:有没有办法在评论中发布长文本和代码?如此奇怪:p – user2475096