Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListPicker SelectionChanged被多次调用_C#_Xaml_Events_Windows Phone 8 - Fatal编程技术网

C# ListPicker SelectionChanged被多次调用

C# ListPicker SelectionChanged被多次调用,c#,xaml,events,windows-phone-8,C#,Xaml,Events,Windows Phone 8,ListPicker是来自 代码: 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

ListPicker是来自

代码:

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属性,不仅可以从中读取(遵循指南),而且效果很好
问题:

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;
                    }
            }
        }
    }
}
每当我更改
字段
listpicker的selecteditems时,就会多次调用
字段\u SelectionChanged
事件。(我希望它只被调用一次)另一个更重要的事情是,在最后一次调用中,
字段_SelectedItems
与旧的SelectedItems(在“更改”之前的字段)相等

这是一个bug还是我的问题?(如何修复?


编辑:

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;
                    }
            }
        }
    }
}
我选中了,如果在我选择项目之前,listpicker中没有选择的项目,那么它似乎只会被调用一次。(我的意思是,在我选择新项目之前,SelectedItems为空)

已修复:)

我使用了这个答案中建议的代码:

固定:)

我使用了这个答案中建议的代码:


我遇到了同样的问题,selectedchange事件被调用了两次。在listPicker\u selectedchange事件结束时,将listPicker selected索引设置为-1

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

谢谢你,丹·巴兹莱

我遇到了同样的问题,selectedchange事件被调用了两次。在listPicker\u selectedchange事件结束时,将listPicker selected索引设置为-1

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

谢谢你,丹·巴兹莱

您可以显示订阅
SelectionChanged
事件的代码吗?@MatthewWatson它在XAML中您可以显示订阅
SelectionChanged
事件的代码吗?@MatthewWatson它在XAML中