Как отобразить в UWP ListView сумму каждой записи? - PullRequest
0 голосов
/ 20 февраля 2019

Следующий сценарий (я значительно упростил его для этого примера):

У меня есть список групп.Каждой группе присваиваются элементы с суммами.

Это список из моей 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.*}", но, к сожалению, больше значения не отображались

Есть лиспособ работы с конвертерами?

Или у вас есть очень простое решение для меня?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Большое спасибо @ 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}" />
0 голосов
/ 20 февраля 2019

но я бы хотел показать в списке сумму всех элементов в этой группе.

Странная структура вашей модели. Поле Element для GroupЭлемент, но не List<Element>.Но в классе Element есть поле Amount.Если вы просто хотите показать это поле, вы можете использовать следующее.

<TextBlock Grid.Column="2" Text="{Binding Element.Amount}" />

Если ваш класс модели похож на следующий, вы можете добавить поле SumAmount, которое использовалось для записи всей суммы элемента.

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();
        }               
    }
}

Использование

<TextBlock Grid.Column="2" Text="{Binding SumAmount}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...