2012-02-06 14 views
1

は、私は現在の設定のリストボックスがあります。のListBoxのscrollIntoViewと信頼できないのSelectedItem

DetailsList.DataContext = details; 

次のことをやったボタン:

details.Add(System.DateTime.Now.ToString("HH:mm:ss ") + someString); 
DetailsList.UpdateLayout(); 
var lastItem = DetailsList.Items[DetailsList.Items.Count - 1]; 
DetailsList.SelectedItem = lastItem; 
DetailsList.ScrollIntoView(lastItem); 

リスト内の最後の項目を選択して、それにスクロールし、それはそれだけの時間の約75%をしなければならないこと。代わりに、それはしばしば2番目の最後を選択し、その代わりにスクロールします。

私は、スクロールと選択をLayoutUpdatedイベントハンドラに移動しようとしましたが、変更はありません。

私は2つの別々のボタンを試しました - 一つは追加するもの、もう一つは選択してスクロールするものです。 1つのアイテムを一度に追加してからスクロールすると、少し信頼性が高いように見えます。これは時間の90%で動作します。スクロールする前に半ダースのアイテムを追加すると、ほとんど動作しません。通常、新しい項目の1つを選択しますが、最後の項目は選択しません。

何か間違っているか、System.Windows.Controls.ListBoxにバグがありますか?

+1

「someString」とは何ですか?それはいつも同じ価値ですか?ボタンを1秒に1回以上押すと、ここでは平等問題が発生する可能性があると私は考えています。 –

+0

値が重要だとは思わなかった。はい、ボタンテストでは定数でした。同じ内容の要素を区別する方法がないということですか? 「実際の」データが同じであり、1秒間に複数回追加される場合もあります。 –

+0

値は重要です。 ListBoxでSelectedItemを設定するときは、選択するアイテムを見つけるためにアイテムのEqualsメソッドを呼び出します。同じテキストの2つの文字列がある場合は、どちらが意味するのか把握することができず、観察された動作が得られます。 –

答えて

6

問題は、同じ文字列値を持つ複数のアイテムがリストに追加されていることです。 ListViewSelectedItemプロパティを設定すると、Equalsメソッドが呼び出されて正しい項目が検索されます。 Equalsがtrueを返す最初の項目が選択されます。これは、観察された動作を取得している理由です。

一意の文字列を追加する(たとえば、ミリ秒を追加する)か、別のクラスにラップして一意に識別できるようにする必要があります。

+0

あなたはこれ以上のupvotesを持っているはずです。愚かなテストデータ...... – JoshHetland

関連する問題