0
当底层的ItemSource来自LINQ查询时,我在获取SelectedItem为ComboBox设置时遇到了一些麻烦。当ItemSource是LINQ时UWP设置ComboBox的SelectedItem
下面是它设置的代码,该方法来自Cortana语音命令。说出这本书的名字可能与书面名称不同,因为我必须列出名称中的数字,例如“first”,而不是“1”。
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()作为BookNames; cmb_Book.SelectedItem = new BookNames(){BookName = voice.ActualBookName}; cmb_Book.SelectedItem = newBook;' 这两个都没有改变SelectedItem。 –
在新创建的BookName和从cmb_Book.Items中拉出现有项目之间的哈希码也是相同的,所以我想知道它是否是UWP中的组合框问题?除了循环遍历Items,获取索引,并设置SelectedIndex(实际上可以工作,但不是最优雅的方法)之外,我不确定是否需要设置它的另一种方法。 –
还需要做的是将IEnumerable转换为ObservableCollection ,然后它能够正确设置SelectedItem。 –