我現在正在學習VS2015社區中的UWP,並且在關於ComboBox的一節中遇到問題,並且確實可以使用一些幫助。ComboBox上的SelectedIndex到數據更改的第一項
我正在寫聖經應用程序,並有3個組合框用於翻譯,書本和章節。當我更改Book下拉菜單時,它應該將章節更改爲1.至少在爲章節制作前後按鈕之前,現在只是介紹基本知識。當我改變翻譯時,我們可以說從NIV到KJV,它應該改變爲當前選擇的那個翻譯中的書/章。
我已經預裝了來自XML的文本並將它們加載到一個名爲dataLoader的對象中。我在下面的代碼中通過LINQ進行選擇。
所以現在我這樣說:
private void DataLoader_Completed(object sender, EventArgs e)
{
dataLoaded = true;
cmb_Translation.ItemsSource = from t in dataLoader.Translations select new { t.TranslationShortName };
cmb_Book.ItemsSource = from b in dataLoader.Translations[0].Books select new { b.BookName };
cmb_Chapter.ItemsSource = from c in dataLoader.Translations[0].Books[0].Chapters select new { c.Index };
cmb_Book.SelectedIndex = 0;
cmb_Translation.SelectedIndex = 0;
cmb_Chapter.SelectedIndex = 0;
}
private void translationChanged()
{
chapterChanged();
}
private void bookChanged()
{
cmb_Chapter.ItemsSource = from c in dataLoader.Translations[cmb_Translation.SelectedIndex].Books[cmb_Book.SelectedIndex].Chapters select new { c.Index };
cmb_Chapter.SelectedIndex = 0;
}
private void chapterChanged()
{
textBlock_Verses.Text = dataLoader.Translations[cmb_Translation.SelectedIndex].Books[cmb_Book.SelectedIndex].Chapters[cmb_Chapter.SelectedIndex].TextLineSeparated;
}
private void cmb_Translation_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
translationChanged();
}
private void cmb_Book_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
bookChanged();
}
private void cmb_Chapter_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
chapterChanged();
}
遇到錯誤,雖然在該指數超出範圍,因爲翻譯的起初的SelectedIndex爲-1第一次運行時回來,如果我首先運行翻譯,它會讓我在SelectedIndex爲-1的書上超出範圍。
我希望選定的索引更改觸發正確的事件,但正如你所看到的那樣,現在它不會如何工作。此外,代碼非常混亂,我已經開始考慮一下Binding,但是有很多障礙想要解決如何綁定到返回LINQ結果的屬性。我不知道如何向前邁進,絕對感謝我能得到的任何幫助。
原來我不得不做更多的工作,否則事件被忽略,所以我會有空下拉或文本視圖不會得到更新,因爲它取決於下拉菜單。只要你觸發設置SelectedIndex,它就會更新事件,所以如果它根本沒有觸發,你就會遇到麻煩,但是你遇到了一個「悖論」,我會在答案中解釋它。 –