Silverlight 在MVVM中将DataGridTextColumn与计算绑定
我是Silverlight MVVM的新手,我正在创建一个将数据绑定到DataGrid的项目 以下是我的数据库结构:Silverlight 在MVVM中将DataGridTextColumn与计算绑定,silverlight,mvvm,Silverlight,Mvvm,我是Silverlight MVVM的新手,我正在创建一个将数据绑定到DataGrid的项目 以下是我的数据库结构: TBLAuthorization变异 (授权变量ID、授权请求ID、编号) tblAuthorizationRequest(授权请求ID,名称) TBLAuthorizationVariificationDetails(详细ID、授权请求ID、金额) 我想在gridview中显示所有授权的总金额 下面是我的代码,在ViewModel类中,我从tblauthorizationv
- TBLAuthorization变异 (授权变量ID、授权请求ID、编号)
- tblAuthorizationRequest(授权请求ID,名称)
- TBLAuthorizationVariificationDetails(详细ID、授权请求ID、金额)
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:如果你理解了我的问题,你能给我问题的答案吗?我非常迫切需要解决这个问题。谢谢你通知我我的错误。所有这些都只是编辑我的问题,也请回答我…你想显示什么eAuthorizationRequest.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>