我在 WPF 中有一个 TextBox
和一个 ListBox
。 ListBox
(listAmount) 包含一些值,我想要那个 TextBox
(txtTotalAmount) 中的这些值的总和。
我目前正在使用这段代码:
int i = 0;
int sum = 0;
for (i = 0; i < listAmount.Items.Count; i++)
{
sum = sum + Convert.ToInt32(listAmount.Items[i]);
}
txtTotalAmount.Text = sum.ToString();
我得到这个错误:
Unable to cast object of type 'System.Windows.Controls.ListBoxItem' to type 'System.IConvertible'
我会很感激你的。
最佳答案
错误消息说明 listAmount.Items[i]
返回 ListBoxItem
类型的实例.该类派生自 ContentControl
,这就是为什么它的 Content
property应包含您要查找的实际值。
因此,尝试:
sum += Convert.ToInt32(((ListBoxItem)listAmount.Items[i]).Content);
类型转换是必要的,因为 indexer of ItemCollection
输入为 object
.
也就是说,您是否尝试过使用集合(例如 ObservableCollection<int>
)来存储您的值并将该集合设置为 ItemsSource
你的列表框?然后,您可以直接从集合中获取整数值并对其求和,而无需进行任何转换。
将此声明添加到您的窗口以存储整数值列表:
private readonly ObservableCollection<int> values = new ObservableCollection<int>();
然后,在您调用 InitializeComponents
之后, 分配 ItemsSource
属性:
listAmount.ItemsSource = values;
在 values
中添加和删除您的值随时列出;列表的内容将始终反射(reflect)在列表框中。
为了检索这些值的总和,您可以简单地使用以下命令:
int sum = values.Sum();
请注意 System.Linq
namespace需要包含在 using
中让它工作的指令,或者 Sum
method不会被发现。)
关于c# - wpf中列表框的值总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17880399/