首页 文章

ListPicker SelectionChanged被多次调用

提问于
浏览
1

ListPicker是来自WP8 Toolkit.的控件

Code:

private void field_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Make sure we don't handle the event during initiation.
    if (e.RemovedItems != null && e.RemovedItems.Count > 0)
    {
        if (this.field.SelectedItems != null)
        {
            if (this.field.SelectedIndex != -1)
            {
                ListPicker_SelectionChanged(sender, e);
                //Make needed proffesions visable:
                profls.Clear();
                foreach (ListPickItem item in field.SelectedItems)
                    switch (item.Tag)
                    {
                        default:
                            foreach (ListPickItem iitem in profl[9])
                                profls.Add(iitem);
                            break;
                        case 90017:
                            foreach (ListPickItem iitem in profl[0])
                                profls.Add(iitem);
                            break;
                        case 9000:
                            foreach (ListPickItem iitem in profl[1])
                                profls.Add(iitem);
                            break;
                    }
            }
        }
    }
}
  • 请注意 profession ListPicker的ItemsSource是数据绑定到 profls var .

  • 我修改了Listpicker,这样我也可以设置SelectedItems属性,而不仅仅是从它读取(在this指南之后)并且效果很好 .

Problem:

每当我更改 field listpicker的选择项时, field_SelectionChanged 事件都会被多次调用 . (我希望它只被调用一次..)另一个奇怪的事情是,在最后一次调用中 field_SelectedItems 等于旧的selectedItems("change"之前的那些) .

Is it a bug or my problem? (How do I fix it?)


EDIT:

我检查过,如果在我选择项目之前列表选择器中没有选定的项目,它似乎只被调用一次 . (我的意思是在选择新项目之前,SelectedItems为空)

2 回答

  • 3

    固定:)

    我使用了这个答案中建议的代码:listPicker not updating selection in full mode

    if (MyListPicker.SelectedIndex != -1)
    {
     //Code..
    }
    
  • 2

    我有两次调用selectedchange事件的相同问题 . 在listPicker_selectedchange事件结束时,将listpicker selected index设置为-1 .

    private void listpicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      //Code
      listpicker.SelectedIndex = -1;
    }
    

    谢谢Dan Barzilay !!

相关问题