ListPicker SelectionChanged被多次调用

时间:2013-06-09 17:52:28

标签: c# xaml events windows-phone-8

ListPicker是来自WP8 Toolkit.

的控件

代码:

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指南之后)并且效果很好。

问题:

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

这是一个错误还是我的问题? (我该如何解决?)


修改

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

2 个答案:

答案 0 :(得分:3)

修正了:)

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

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

答案 1 :(得分:2)

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

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

谢谢Dan Barzilay !!