以下情况 (在此示例中,我已对其进行了大大简化):
我有一个团体名单。 每个组都分配有数量的元素。
这是我的ViewModel中的列表:
public List<Group> Groups { get; set; }
这些是我的模特:
public class Group
{
public int GroupId { get; set; }
public string Name { get; set; }
public Element MainElement { get; set; }
}
public class Element
{
public int ElementId { get; set; }
public int GroupId { get; set; }
public string Name { get; set; }
public double Amount { get; set; }
}
ListView的外观如下:
<ListView ItemsSource="{Binding Groups}>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Name}" />
<TextBlock Grid.Column="1" Text="{Binding GroupId}" />
<TextBlock Grid.Column="2" Text="{Binding SumOfAllItemsInThisGroup}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
整个UWP应用程序运行正常,但我想在列表中显示该组中所有元素的总和。
我不想将值保存在数据库中。 还是我必须?
我尝试过类似的事情:
var myGroups = new SuperGroup
{
Group = group,
Amount = db.Elements.Where(e => e.Group == group).Select(e => e.Amount).Sum()
};
public class SuperGroup
{
public Group Group { get; set; }
public double SumAmount { get; set; }
}
并将绑定更改为Text="{Binding Group.*}"
但不幸的是,没有显示更多的值
是否可以使用转换器?
或者您对我有一个非常简单的解决方案?
答案 0 :(得分:2)
但是我想在列表中显示该组中所有元素的总和。
您的模型结构很奇怪,Element
的{{1}}字段是Element而不是Group
。但是List<Element>
类中有Amount
字段。如果您只想显示此字段,则可以使用以下命令。
Element
如果您的模型类如下,则可以添加SumAmount字段,该字段用于记录所有元素的数量。
<TextBlock Grid.Column="2" Text="{Binding Element.Amount}" />
用法
public class Group
{
public int GroupId { get; set; }
public string Name { get; set; }
public List<Element> Elements { get; set; }
public double SumAmount
{
get
{
return Elements.Select(e=>e.Amount).Sum();
}
}
}
答案 1 :(得分:0)
非常感谢@ nico-zhu-msft,他将我带到以下解决方案中!
我向我的组添加了一个未映射的属性,并且由于直接访问数据库而无法使用元素列表。
[NotMapped]
public double SumAmount {
get
{
using (var db = new DBContext())
{
return db.Elements.Where(e => e.GroupId == myGroupId).Select(e => e.Amount).Sum();
}
}
}
就用他写的话
<TextBlock Grid.Column="2" Text="{Binding SumAmount}" />