2014-09-02 79 views
0

我有一个列表框有三个值。我需要得到所有ListBox项的FEstado值并对它们进行求和。但是,这个ListBox没有定义的项目,用户从另一个ListBox中选择项目。如何总结列表框项目

我的列表框:

<ListBox Name="List2" HorizontalContentAlignment="Stretch" Grid.ColumnSpan="3" Margin="0,43,-66,0"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="432" Height="95" Hold="holdListRmv"> 
       <TextBlock Grid.Column="0" Text="{Binding FNome}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
       <TextBlock Grid.Column="1" Text="{Binding FEstado}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> 
       <TextBlock Grid.Column="2" Text="{Binding Quantity}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

您使用的是MVVM吗?为什么你不视视图模型的价值,然后绑定你想要的? – Diego 2014-09-02 13:44:16

回答

2

假设你通过增加模型项目ListBoxItems属性(如图your previous question)填充ListBox,那么你就可以得到同样的ListBox.Items财产的所有项目。并假设FEstado是一个数字,你可以做这样的事情:

var items = List2.Items.Cast<Fields>(); 
var total = items.Sum(o => o.FEstado); 
+0

此代码适用于我。你又救了我。非常感谢你,我的朋友。 – 2014-09-02 14:08:15

1

你可以做这样的事情, 试试这个:

XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0"> 
    <StackPanel> 
     <ListBox Name="List2" HorizontalContentAlignment="Stretch" Grid.ColumnSpan="3" Margin="0,43,-66,0"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17" Width="432" Height="95" > 
         <TextBlock Grid.Column="0" Text="{Binding FNome}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
         <TextBlock Grid.Column="1" Text="{Binding FEstado}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> 
         <TextBlock Grid.Column="2" Text="{Binding Quantity}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <Button Content="sum" Click="Button_Click_1"></Button> 
    </StackPanel> 
</Grid> 

CS:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    ObservableCollection<DataClass> obj = new ObservableCollection<DataClass>(); 
    obj.Add(new DataClass("AA", "10", "10")); 
    obj.Add(new DataClass("BB", "10", "10")); 
    List2.ItemsSource = obj; 
} 

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    int sum = 0; 
    for (int i = 0; i < List2.Items.Count; i++) 
    { 
     DataClass obj = (DataClass)List2.Items[i]; 
     sum += int.Parse(obj.FEstado.ToString()); 
    } 
    MessageBox.Show(sum.ToString()); 
} 

public class DataClass 
{ 
    public string FNome { get; set; } 
    public string FEstado { get; set; } 
    public string Quantity { get; set; } 
    public DataClass() { } 

    public DataClass(string FNome, string FEstado, string Quantity) 
    { 
     this.FNome = FNome; 
     this.FEstado = FEstado; 
     this.Quantity = Quantity; 
    } 
}