1

私は Windows Phone の開発に不慣れで、現在 WP8 で LongListSelector を使用しているときに問題に直面しており、希望する結果を達成する方法がわかりません。

いつものようにアイテムのリストを表示するために使用します。使用されるクラスには 5 つの項目が含まれており、そのうちの 1 つは float 値です。リストヘッダーに、リストに含まれるすべての正の浮動小数点値の合計を表示したいのですが、これを行う方法がまったくわかりません。

元のバインディングに加えて、別の変数 (合計の結果) を特にリストヘッダーにバインドしようとしたか、合計の結果を含むクラスに別の項目を追加しようとしました (したがって、各リスト項目のリスト全体で繰り返されます)。動作しません。

これはかなり基本的な機能 (たとえば、リストの要素の数を数えて表示する) だと思いますが、これを行う方法がわかりません。

編集:コードを表示しても役に立たないと思いましたが、ここにあります。(関連のないフォーマットを削除しました)

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 を表示する最良の方法の 1 つは、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 に答える