1

私はTextBoxWPFと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();

そして、私はこのエラーを受け取ります:

タイプ 'System.Windows.Controls.ListBoxItem' のオブジェクトをタイプ 'System.IConvertible' にキャストできません

私はあなたに感謝します。

4

5 に答える 5

6

エラー メッセージは、listAmount.Items[i]が type のインスタンスを返すことを説明していますListBoxItem。そのクラスは から派生しContentControlているため、そのContentプロパティには探している実際の値が含まれている必要があります。

したがって、試してください:

sum += Convert.ToInt32(((ListBoxItem)listAmount.Items[i]).Content);

のインデクサーItemCollectionは に型指定されるため、型キャストが必要ですobject


そうは言っても、コレクション (例: ObservableCollection<int>) を使用して値を保存し、そのコレクションをItemsSourceリストボックスの として設定しようとしましたか? その後、何も変換する必要なく、コレクションから整数値を直接取得して合計できます。

この宣言をウィンドウに追加して、整数値のリストを保存します。

private readonly ObservableCollection<int> values = new ObservableCollection<int>();

次に、 を呼び出した後、次のプロパティInitializeComponentsを割り当てます。ItemsSource

listAmount.ItemsSource = values;

valuesいつでも好きなときにリストに値を追加したり、リストから値を削除したりできます。リストの内容は常にリストボックスに反映されます。

これらの値の合計を取得するには、次のように単純に使用できます。

int sum = values.Sum();

System.Linqこれを機能させるには、名前空間usingをディレクティブに含める必要があることに注意してください。そうしないと、Sumメソッドが見つかりません。)

于 2013-07-26T11:49:24.380 に答える
-3

おそらくもっとクリーンな方法がありますが、これは

 var items = listAmount.Items;
        int SUM;
        foreach (var item in items)
        {
            int itemvalue = Convert.ToInt32(item.ToString());

            SUM += itemvalue;
        }
于 2013-07-26T11:49:04.387 に答える