Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对列表框中的项目求和?_C#_Wpf_Linq_Listbox - Fatal编程技术网

C# 如何对列表框中的项目求和?

C# 如何对列表框中的项目求和?,c#,wpf,linq,listbox,C#,Wpf,Linq,Listbox,我有两个ListBoxes、Source和Destination。目标列表框包含用户选择的项目 如何对目标列表框中的项目求和 目标列表框有两种数据类型字符串(说明)和十进制(成本)。 我只想把成本加起来。这是XAML代码 <ListBox Height="237" HorizontalAlignment="Left" Margin="44,191,0,0" Name="lstDestination" VerticalAlignment="Top" Width="264" Grid.Colu

我有两个
ListBox
es、
Source
Destination
。目标
列表框
包含用户选择的
项目

如何对目标
列表框中的项目求和

目标
列表框
有两种数据类型
字符串
(说明)和
十进制
(成本)。 我只想把成本加起来。这是XAML代码

<ListBox Height="237" HorizontalAlignment="Left" Margin="44,191,0,0" Name="lstDestination" VerticalAlignment="Top" Width="264" Grid.ColumnSpan="2" ItemsSource="{Binding Source={StaticResource myItemList}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <DockPanel >
                   <TextBlock FontWeight="Bold" Text="Item:"  DockPanel.Dock="Left" Margin="5,0,10,0"/>
                   <TextBlock Text="{Binding Path=Resource}" Foreground="Green" FontWeight="Bold" />
                   <TextBlock FontWeight="Bold" Text="Cost:"  DockPanel.Dock="Left" Margin="5,0,10,0"/>
                  <TextBlock Text="{Binding Path=Cost}" FontWeight="Bold" />
                </DockPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

用户选择所需的
项目,我的挑战是获取所选项目的总数(已移动到
列表框
目的地)

您的
.cs
-文件将知道属性
lstDestination
。您可以使用
foreach
循环来迭代
lstDestination
中的所有元素。在同一个循环中,您可以计算成本。

在我看来,您不需要按lstDestination.SelectedItems迭代,而是按lstDestination.Items迭代。要对绑定的数据进行操作,您应该将其强制转换到正在使用的数据类型列表中。例如

private decimal SumDLstBox()
{
    return lstDestination.SelectedItems.Cast<Foo>().Sum(f => f.Cost);
}
private decimal SumDLstBox()
{
返回lstDestination.SelectedItems.Cast().Sum(f=>f.Cost);
}

其中,
Foo
是绑定到控件的列表的数据类型。

@好吧,尝试一下,测试一下,如果你不明白为什么它不起作用,请查看上面的错误消息,看看以前是否有人问过。如果这些答案对你没有帮助,就用你的代码、错误信息和你尝试过的东西发布一个问题。这就是这个网站的工作方式。我们不会为您创建应用程序。你在哪里碰壁?你不明白的是什么?你真的必须更清楚,因为我猜不出你不明白什么…@JoeJah我知道我用我尝试过的代码编辑了这个问题。抛出的错误是“'object'不包含'Cost'的定义,没有扩展方法'Cost'接受'object'类型的第一个参数”-1。这会鼓励使用非常糟糕的做法@HighCore:+1-对不起,我不同意。我也喜欢MVVM模式,并且我也通过坚持它来实现一切,但是你不能告诉人们,他们的方法是错误的,因为他们没有使用它。这是一个自由的世界,实现WPF应用程序的方法不止一种。如果他们不想分离UI、逻辑和数据,就让他们来吧。当然你可以给出建议,但仅此而已。
ItemsSource
来自哪里?发布相关代码。谢谢@Shawn我更正了代码以返回lstDestination.Items
private decimal SumDLstBox()
{
    return lstDestination.SelectedItems.Cast<Foo>().Sum(f => f.Cost);
}