Silverlight 在MVVM中将DataGridTextColumn与计算绑定

Silverlight 在MVVM中将DataGridTextColumn与计算绑定,silverlight,mvvm,Silverlight,Mvvm,我是Silverlight MVVM的新手,我正在创建一个将数据绑定到DataGrid的项目 以下是我的数据库结构: TBLAuthorization变异 (授权变量ID、授权请求ID、编号) tblAuthorizationRequest(授权请求ID,名称) TBLAuthorizationVariificationDetails(详细ID、授权请求ID、金额) 我想在gridview中显示所有授权的总金额 下面是我的代码,在ViewModel类中,我从tblauthorizationv

我是Silverlight MVVM的新手,我正在创建一个将数据绑定到DataGrid的项目

以下是我的数据库结构:

  • TBLAuthorization变异 (授权变量ID、授权请求ID、编号)

  • tblAuthorizationRequest(授权请求ID,名称)

  • TBLAuthorizationVariificationDetails(详细ID、授权请求ID、金额)

我想在gridview中显示所有授权的总金额

下面是我的代码,在
ViewModel
类中,我从
tblauthorizationvariation
获取
tblAuthorizationRequest

PagedCollectionView _AuthorizationVarificationList;

public PagedCollectionView AuthorizationVarificationList
{
  get { return _AuthorizationVarificationList; }
  set 
  {
     _AuthorizationVarificationList = value;
     OnPropertyChanged("AuthorizationVarificationList"); }
  }

  private void GetVarifications()
  {
    IsBusy = true;
    LoadOperation<AuthorizationVerification> loadOp = 
                          objContext.Load(objContext.GetCreditNotesQuery());

    loadOp.Completed += (sender, e) =>
    {
       IEnumerable<AuthorizationVerification> op = 
               ((LoadOperation<AuthorizationVerification>)sender).Entities;
       PagedCollectionView view = new PagedCollectionView(op);
       this.AuthorizationVarificationList = view;
       cnt = cnt - 1;
       if (cnt <= 0)
         IsBusy = false;
    };
  }
PagedCollectionView\u授权变量列表;
公共页面集合视图授权变体列表
{
获取{return\u AuthorizationVarificationList;}
设置
{
_授权变量列表=值;
OnPropertyChanged(“AuthorizationVarificationList”);}
}
私有void GetVarifications()
{
IsBusy=true;
LoadOperation loadOp=
Load(objContext.GetCreditNotesQuery());
loadOp.Completed+=(发送方,e)=>
{
IEnumerable op=
((加载操作)发送方)。实体;
PagedCollectionView视图=新的PagedCollectionView(op);
this.AuthorizationVarificationList=视图;
cnt=cnt-1;

如果(cnt如果我理解正确,您是在查看摘要行?如果是,请查看以下链接。您可能需要在ViewModels后面更好地塑造模型对象(很少有好的做法是将模型(在本例中为DTO)直接显示到视图).

正如我所建议的,您可以为集合项创建一个视图模型类,并按原样填充它

public class VerificationViewModel
{
    public int AuthorizationVerificationId { get; set; }

    public double Amount { get; set; }
}
然后使用LINQ查询对集合进行分组并返回汇总项:

loadOp.Completed += (sender, e) =>
{
   IEnumerable<AuthorizationVerification> op = 
           ((LoadOperation<AuthorizationVerification>)sender).Entities;

   var models = op.GroupBy(item => item.AuthorizationVerificationId)
                  .Select(g => new VerificationViewModel
                                { 
                                    AuthorizationVerificationId = g.Key, 
                                    Amount = g.Sum(gi => gi.Amount) 
                                })
                  .ToList();

   PagedCollectionView view = new PagedCollectionView(models);
   // Everything else is the same
}

//Also change the type of the property which is bound to SelectedItem
public VerificationViewModel SelectedCreditNote { get; set; }
loadOp.Completed+=(发送方,e)=>
{
IEnumerable op=
((加载操作)发送方)。实体;
var models=op.GroupBy(item=>item.AuthorizationVerificationId)
.选择(g=>new VerificationViewModel
{ 
授权验证ID=g.密钥,
金额=总金额(gi=>gi.金额)
})
.ToList();
PagedCollectionView视图=新的PagedCollectionView(模型);
//其他一切都一样
}
//同时更改绑定到SelectedItem的属性的类型
公开验证ViewModel SelectedCreditNote{get;set;}
并更改第二列的绑定路径:

<sdk:DataGrid.Columns>
  <sdk:DataGridTextColumn Header="Credit No" 
     Binding="{Binding Path=AuthorizationVerificationId}" Width="200"/>

  <sdk:DataGridTextColumn Header="Amount" 
     Binding="{Binding Path=Amount}" MinWidth="100" Width="*"/>

</sdk:DataGrid.Columns>   


此代码应计算每个Id的金额总和。如果您需要其他聚合,您可以更改linq查询。

@Tim Post谢谢,请您给我答案。我很急……您已经在StackOverflow上工作了1年,您能自己格式化您的问题吗?这真的很难阅读和理解。尤其是ViewModel公开了哪些项目,以及什么是
特定作者
@sll:如果你理解了我的问题,你能给我问题的答案吗?我非常迫切需要解决这个问题。谢谢你通知我我的错误。所有这些都只是编辑我的问题,也请回答我…你想显示什么e
AuthorizationRequest.Amount
?我在ViewModel中没有看到
AuthorizationRequest
,它从哪里来?我没有摘要列,只有一列显示金额的总和。在这个链接中,有一个标题显示总额,但我想在记录中而不是在标题中显示。
gi=>gi.Amount
我不能直接显示这样做,我得到授权变量列表,从中我必须得到授权请求,然后从中我得到授权变量详细信息的对象,然后我必须做数量的总和。为此,我写
amount=Convert.ToDouble(g.sum(gi=>gi.AuthorizationRequest.AuthorizationMaintenanceDetails.sum(a=>a.AuthorizationAmount))
但它不能达到预期的金额。希望您现在能很好地理解我的问题。@ViralSarvaiya可能您没有加载所有外键关系,我认为问题出在
gi.AuthorizationRequest.authorizationMaintenanceDetail中‌​ls
行。像这里描述的那样使用
包含
功能:,它必须有帮助。
<sdk:DataGrid.Columns>
  <sdk:DataGridTextColumn Header="Credit No" 
     Binding="{Binding Path=AuthorizationVerificationId}" Width="200"/>

  <sdk:DataGridTextColumn Header="Amount" 
     Binding="{Binding Path=Amount}" MinWidth="100" Width="*"/>

</sdk:DataGrid.Columns>