1

我是 Windows Phone 开发的新手,目前在 WP8 中使用 LongListSelector 时遇到问题,我不知道如何继续实现我想要的结果。

我像往常一样使用它来显示项目列表。使用的类包含 5 项,其中一项是浮点值。我想在列表标题中显示列表中包含的所有正浮点值的总和,但我不知道如何执行此操作。

除了原始绑定之外,我尝试将另一个变量(总和的结果)专门绑定到 listheader,或者在包含总和结果的类中添加另一个项目(因此在每个列表项中的整个列表中重复),但它没有不行。

我想这是一个非常基本的功能(例如计算和显示列表元素的数量),但我不知道如何做到这一点。

编辑:我认为显示我的代码无济于事,但就是这样。(我去掉了不相关的格式)

XAML

<phone:LongListSelector x:Name="ListeSolde" LayoutMode="List">
    <phone:LongListSelector.ListHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding SommeTotale}" />
        </DataTemplate>
    </phone:LongListSelector.ListHeaderTemplate>
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Nom}" />
            <TextBlock Text="{Binding DerniereConnexion}" />
            <TextBlock Text="{Binding Depuis}" />                                        
            <TextBlock Text="{Binding Solde}"  />
       </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
 </phone:LongListSelector>

类定义

public class resume
{
    public string Nom { get; set; }
    public double Solde { get; set; }
    public string Depuis { get; set; }
    public string DerniereConnexion { get; set; }

    public resume(string nom, double solde, string depuis, string derniereconnexion)
    {
        this.Nom = nom;
        this.Solde = solde;
        this.Depuis = depuis;
        this.DerniereConnexion = derniereconnexion;
    }
}
public class total
{
    public double Total { get; set; }

    public double calculTotal(List<resume> soldes)
    {
        double total = new double();
        foreach (resume solde in soldes)
        {
            if (solde.Solde > 0)
                total += solde.Solde;
        }

        return total;
    }

    public total(double Dtotal)
    {
        this.Total = Dtotal;
    }
}

和后面的代码

public MainPage()
    {
        InitializeComponent();

        List<resume> soldes = new List<resume>();

        Donnees MainData = new Donnees();
        soldes = MainData.RefreshResume(soldes); // A method that basically add items to the list

        total SommeTotale = new total(1);
        SommeTotale.Total = SommeTotale.calculTotal(soldes);

        ListeSolde.ItemsSource = soldes;
    }

这当然不起作用(就列表标题而言),这就是我的做法

4

2 回答 2

3

这就是我设法将其他数据从我的 ViewModel 绑定到 LongListSelector.ListHeader 的标题的方法。

<phone:LongListSelector.ListHeaderTemplate>
    <DataTemplate>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="2" Foreground="DarkViolet"
                       Text="{Binding ElementName=LayoutRoot, Path=DataContext.AddressBookList.Count}" />
        </Grid>
    </DataTemplate>
</phone:LongListSelector.ListHeaderTemplate>
于 2013-05-15T15:23:36.317 回答
0

ListHeader 属性直接绑定到 LongListSelector 的 DataContext。这与 LongListSelector 中包含的项目不同。其中包含的项目绑定到 ItemSource 中的每个项目。让 ListHeader 显示的最佳方法之一是创建一个包含 LongListSelector 数据的对象

public class ResumeContainer
{
    public double SommeTotale { get { return Resumes.Sum(r => r.Value); } }
    public IEnumerable<Resume> Resumes { get; set; }
}

您可以将 LongListSelector 的 DataContext 设置为 ResumeContainer 的一个实例。这最好是您的 ViewModel 的属性。您需要将您的 xaml 更改为

<phone:LongListSelector x:Name="ListeSolde" ItemsSource="{Binding Resumes}">

您的代码隐藏然后更改为

List<resume> soldes = new List<resume>();

Donnees MainData = new Donnees();
soldes = MainData.RefreshResume(soldes);
ListeSolde.DataContext = new ResumeContainer { Resumes = soldes };
于 2013-07-04T07:33:31.510 回答