1

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;
                    }
            }
        }
    }
}
  • 请注意,professionListPicker 的 ItemsSource 是数据绑定到proflsvar。
  • 我修改了 Listpicker,以便我还可以设置 SelectedItems 属性,并且不仅可以从中读取(遵循指南)而且效果很好。

问题:

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

是bug还是我的问题?(我如何解决它?)


编辑:

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

4

2 回答 2

3

固定的 :)

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

if (MyListPicker.SelectedIndex != -1)
{
 //Code..
}
于 2013-06-10T20:10:28.507 回答
2

我遇到了两次调用 selectedchange 事件的相同问题。在 listPicker_selectedchange 事件结束时,将 listpicker 选定索引设置为 -1。

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

谢谢丹·巴兹莱!!

于 2013-11-28T09:31:43.713 回答