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。 –