2

私がやろうとしているのは、リストボックスの各値について、その値を選択した値と比較し、一致インデックスを選択済みとして設定することだけです。何らかの理由で、タイトルの例外が発生します。理由はわかりませんが。コード:

            foreach(SurfaceListBoxItem n in BackgroundsList.Items)
        {
            if (n.ToString() == current) BackgroundsList.SelectedItem = n;
        }

ありがとう!

4

2 に答える 2

2

WPF では、List.Items に必ずしも ListBoxItem のコレクションが含まれているとは限りません。代わりに、データ値のみが含まれ、データのアイテム コンテナーが派生します。値を設定するには、現在のアイテムを選択したアイテムに設定するだけです。

反復する必要はありません。単純に次のように実行できます。

BackgroundsList.SelectedItem = current;
于 2010-07-22T10:59:09.530 に答える
2

C# の foreach ステートメントは、によって返される要素の型からItems指定された型への暗黙的なキャストを行いますSurfaceListBoxItem。実行時に、返さstringれた を にキャストすることはできませんSurfaceListBoxItemvar代わりに使用することでこれを解決できますSurfaceListBoxItem

foreach(var n in BackgroundsList.Items)
{
    if (n.ToString() == current) BackgroundsList.SelectedItem = n;
}

もちろん、LINQ を使用することもできます。

BackgroundsList.SelectedItem = (
    from n in BackgroundList.Items
    where n.ToString() == current
    select n).FirstOrDefault();
于 2010-07-22T11:03:13.403 に答える