在longlistselector (WP8)中将项相关变量绑定到列表头
本文关键字:变量 绑定 表头 列表 longlistselector WP8 | 更新日期: 2023-09-27 17:51:05
我是Windows Phone开发的新手,我目前在WP8中使用LongListSelector时面临一个问题,我不知道如何继续实现我想要的结果。
我用它像往常一样显示一个项目列表。所使用的类包含5个条目,其中一个是float值。我想在列表头中显示列表中包含的所有正浮点值的总和,但我不知道如何做到这一点。
我尝试将另一个变量(sum的结果)绑定到原始绑定之外的列表头,或者在包含sum结果的类中添加另一个项(因此在每个列表项中重复整个列表),但它不起作用。
我猜这是一个非常基本的功能(例如,计算和显示列表中元素的数量),但我不知道如何做到这一点。
编辑:我认为展示我的代码不会有帮助,但这里是。(我去掉了不相关的格式)
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;
}
这当然是行不通的(就列表标题而言),这就是我要做的
这就是我如何设法将其他数据从我的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>
listtheader属性直接绑定到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 };