基本ItemSourceがLINQクエリのものである場合、SelectedItemをComboBoxに設定するのに問題があります。ItemSourceがLINQのときにUWPがComboBoxのSelectedItemを設定する
ここにコードが設定されていますが、その方法はCortanaの音声コマンドから入力されています。私が綴る名前の数字のために、 "1"ではなく "first"のように、話したときの本の名前は書かれた本の名前と異なるかもしれません。
public void SetBookChapter(string book, int? chapter)
{
Model.BookVoiceName voice = dataLoader.BookVoiceNames.FirstOrDefault(b => b.VoiceBookName.ToLower() == book.ToLower());
if (voice.TotalChapters >= chapter)
{
UpdateChapterText = false;
cmb_Book.SelectedItem = new BookNames { BookName = voice.ActualBookName };
UpdateChapterText = true;
cmb_Chapter.SelectedIndex = chapter.Value - 1;
}
}
cmb_Book.SelectedItem = ...の行をデバッグが設定されていないも、それはすべてのエラーや情報なぜ上を返さない場合、cmb_Bookのための基礎となるItemSourceが、これらのプロパティによって設定されます。
public IEnumerable<BookNames> CurrentBooks
{
get
{
return from b in dataLoader.Translations[TranslationIndex].Books select new BookNames { BookName = b.BookName };
}
}
public IEnumerable<BookNames> BooksInFirstTranslation
{
get
{
return from b in dataLoader.Translations[0].Books select new BookNames { BookName = b.BookName };
}
}
LINQクエリを使用するたびにSelectedItemを直接設定できる回避策がありますか?おそらく、IEnumerableの既知の型を使用して助けてくれると思っていましたが、そうではありません。
ヒントをいただきありがとうございます。私は以下を試しました: 'BookNames newBook = cmb_Book.Items.Where(b =>(b BookNames).BookName.ToLower()== book.ToLower())FirstOrDefault()as BookNames; cmb_Book.SelectedItem = new BookNames(){BookName = voice.ActualBookName}; cmb_Book.SelectedItem = newBook; ' どちらもSelectedItemを変更していません。 –
ハッシュコードも新しく作成されたBookNameと同じで、既存のアイテムをcmb_Book.Itemsから引き出しているので、UWPのComboBoxの問題かどうか疑問に思っていますか? Itemを反復処理してインデックスを取得し、SelectedIndex(実際には動作しますが、最もエレガントなアプローチではありません)を設定するループ以外は、別の設定方法がわかりません。 –
また、IEnumerableをObservableCollection に変換してからSelectedItemを適切に設定する必要がありました。 –