我正在开发一个Windows Phone项目。我有一个列表框,其中包含以下selectionchanged事件处理程序:
private void judgeType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
LoadJudgeCategories(judgeTypeListBox.SelectedItem.ToString());
}
这是LoadJudgeCategories方法:
void LoadJudgeCategories(string judgeType)
{
string[] categories = judgeCategories[judgeType];
List<LabeledTextBox> itemSource = new List<LabeledTextBox>();
foreach (string cat in categories)
{
itemSource.Add(new LabeledTextBox(cat));
}
CategoryPanel.ItemsSource = itemSource;
}
judgeCategories属于
类型Dictionary<string, string[]>
LabeledTextBox是带有文本块和文本框的usercontrol。 CategoryPanel只是一个列表框。
每当更改所选项目时,我想清除CategoryPanel,并将其替换为新列表。
然而,偶尔,当我更改选择时,它会给出异常“值不在预期范围内”。
我该如何解决这个问题?
答案 0 :(得分:0)
添加多个具有相同名称的控件时可能会发生这种情况。试试这个代码。为清晰起见,使用换行符进行细分。我把它变成了一个linq语句,并且还随机命名了每个LabeledTextBox
。
注意:我唯一重要的事情是给LabeledTextBox
一个名字。
Random r = new Random();
void LoadJudgeCategories(string judgeType)
{
CategoryPanel.ItemsSource =
judgeCategories[judgeType]
.Select(cat =>
new LabeledTextBox(cat) { Name = r.Next().ToString() }
).ToList();
}
答案 1 :(得分:0)
只是ObservableCollection
的替代解决方案 - 无需多次设置CategoryPanel.ItemsSource
:
private ObservableCollection<LabeledTextBox> itemSource = new ObservableCollection<LabeledTextBox>();
CategoryPanel.ItemsSource = itemSource; // somewhere in the Constructor
void LoadJudgeCategories(string judgeType)
{
itemSource.Clear();
foreach (string cat in judgeCategories[judgeType])
itemSource.Add(new LabeledTextBox(cat));
}