2011-07-12 15 views
3

私のクラスのオブジェクトを含むリストボックスから項目を選択する必要があります。ここに私のコードは次のとおりです。Windows Phoneでリストボックスの選択項目を変更する7

ロードイベント:

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     XDocument loadedData = XDocument.Load("file.xml"); 
     var data = from query in loadedData.Descendants("element") 
       select new myClass 
       { 
        First = (string)query.Element("first"), 
        Second = (string) query.Element("second") 
       }; 
     List<myClass> d = data.ToList<myClass>(); 
     myList = d; 
     myListBox.ItemsSource = data;    
    } 

し、選択した項目を変更することになっている私のボタン:

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     myListBox.SelectedItem = myList[100]; 
    } 

私はここで何か間違ったことをやっていますか?

答えて

1

myListは、あなたがリストにバインドしたコレクションではありません。
どちらのdが広く、変数のスコープとmyListbutton1_click
または
dataにそれを参照するのではなく、それをコピーします。

0

効率のため、ItemsSourceを 'data'ではなく 'd'に設定します。 linqクエリによって返される列挙型は遅延型であるため、UIが更新されるたびに評価されます。あなたが持っている配列は熱心に作成されるので、後の検索は高速です。

0

ここに小さなバグのようです。私は同じような問題を不変に複製することができました。

データバインドされたアプリケーションに標準VSテンプレートを使用しました。テンプレートには、サンプルデータと入力されたリストボックスが付属しています。選択したアイテムをコレクションの15番目のアイテムに設定するボタンを追加しました。これは期待通りに機能しました。しかし、リストを上にスクロールすると、ボタンをクリックしたときに15番目のレコードに戻りませんでした。ここで推測すると、同じ問題の別の症状です。

これを解決するには、まず、SelectedIndexを-1に設定します。これは基本的に項目の選択を解除します。

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    myListBox.SelectedIndex = -1; 
    myListBox.SelectedItem = myList[100]; 
} 

これがあなたの問題を解決するのであれば、私は不思議です。