C# ListPicker在被解除时未调用SelectedItemsDelegate的Summary

C# ListPicker在被解除时未调用SelectedItemsDelegate的Summary,c#,windows-phone-7,windows-phone-7.1,listpicker,C#,Windows Phone 7,Windows Phone 7.1,Listpicker,我正在使用一个多选列表选择器(11月11日7.1/Mango控件工具包中的新列表选择器) 下面是我的代码——ListPicker的一个“普通”用例,除了我用一个新列表初始化SelecedItems依赖项属性,这样我就可以向它添加内容并正确初始化ListPicker的选定状态。虽然这期节目是关于我是否这样做 初始化列表时(例如,当我调用contactPicker.SetValue(ListPicker.SelectedItemsProperty))会调用SelectedItemsDelegate的

我正在使用一个多选列表选择器(11月11日7.1/Mango控件工具包中的新列表选择器)

下面是我的代码——ListPicker的一个“普通”用例,除了我用一个新列表初始化SelecedItems依赖项属性,这样我就可以向它添加内容并正确初始化ListPicker的选定状态。虽然这期节目是关于我是否这样做

初始化列表时(例如,当我调用contactPicker.SetValue(ListPicker.SelectedItemsProperty))会调用SelectedItemsDelegate的Summary,但当我单击ListPicker上的“完成”按钮时(尽管我的SelectionChanged事件处理程序不会被调用)不会调用

一旦我关闭ListPicker,我只会得到对应于控件“摘要”中第一个选定项的字符串(与调用我的委托并获得逗号分隔的选定项列表的控件相反)

这是虫子吗?还有其他人碰到过这个吗?有解决办法吗

var contactPicker = new ListPicker()
{
    MinWidth = minWidth,
    ExpansionMode = ExpansionMode.FullScreenOnly,
    SelectionMode = SelectionMode.Multiple,
    SummaryForSelectedItemsDelegate = (list) => { return CreateCommaDelimitedList(list); },
    IsTabStop = true
};

contactPicker.ItemsSource = listOfItems;
contactPicker.DisplayMemberPath = "Name";
contactPicker.SetValue(ListPicker.SelectedItemsProperty, new List<Item>());

// initialize the list picker selected values
foreach (var contactRef in listOfSelectedContacts)
    contactPicker.SelectedItems.Add(contactRef);

contactPicker.SelectionChanged += new SelectionChangedEventHandler((o, ea) => 
{
    // add all the newly added items
    foreach (var added in ea.AddedItems)
    {
        Item addedItem = added as Item;
        if (addedItem == null)
            continue;
        listOfSelectedContacts.Items.Add(addedItem);
    }

    // remove all the newly removed items
    foreach (var removed in ea.RemovedItems)
    {
        Item removedItem = removed as Item;
        if (removedItem == null)
            continue;
        listOfSelectedContacts.Items.Remove(removedItem);
    }
});
var contactPicker=newlistpicker()
{
最小宽度=最小宽度,
ExpansionMode=ExpansionMode.FullScreenOnly,
SelectionMode=SelectionMode.Multiple,
SummaryForSelectedItemsDelegate=(列表)=>{return CreateCommaDelimitedList(列表);},
IsTabStop=true
};
contactPicker.ItemsSource=列表项;
contactPicker.DisplayMemberPath=“Name”;
contactPicker.SetValue(ListPicker.SelectedItemsProperty,new List());
//初始化列表选择器的选定值
foreach(选定联系人列表中的var contactRef)
contactPicker.SelectedItems.Add(contactRef);
contactPicker.SelectionChanged+=新的SelectionChangedEventHandler((o,ea)=>
{
//添加所有新添加的项目
foreach(在ea.AddedItems中添加的变量)
{
项目addedItem=作为项目添加;
if(addedItem==null)
继续;
所选联系人列表。项目。添加(增补);
}
//删除所有新删除的项目
foreach(在ea.RemovedItems中移除的变量)
{
Item removedItem=作为项目删除;
如果(removedItem==null)
继续;
所选联系人列表。项。移除(移除项);
}
});

我应该发布我的摘要代表。。。这就是我的错误所在:-(

即使我是以列表的形式创建SelectedItems,并且IList中传入的每个元素都键入了“Item”,传入的IList的具体类型是NOT List。因此null检查成功,方法返回null。当然,我的断点就在该行之后,因此看起来该方法没有被调用。Duh

    private string CreateCommaDelimitedList(IList ilist)
    {
        IList<Item> list = ilist as IList<Item>;
        if (list == null)
            return null;

        // build a comma-delimited list of names to display in a control
        List<string> names = list.Select(it => it.Name).ToList();
        StringBuilder sb = new StringBuilder();
        bool comma = false;
        foreach (var name in names)
        {
            if (comma)
                sb.Append(", ");
            else
                comma = true;
            sb.Append(name);
        }
        return sb.ToString();
    }
私有字符串CreateCommaDelimitedList(IList-IList)
{
IList list=IList作为IList;
if(list==null)
返回null;
//生成以逗号分隔的名称列表以显示在控件中
List Name=List.Select(it=>it.Name.ToList();
StringBuilder sb=新的StringBuilder();
布尔逗号=假;
foreach(名称中的变量名称)
{
if(逗号)
某人加上(“,”);
其他的
逗号=真;
某人(姓名);
}
使某人返回字符串();
}

我应该发布我的摘要委托…这实际上就是我的错误所在:-(

即使我是以列表的形式创建SelectedItems,并且IList中传入的每个元素都键入了“Item”,传入的IList的具体类型是NOT List。因此null检查成功,方法返回null。当然,我的断点就在该行之后,因此看起来该方法没有被调用。Duh

    private string CreateCommaDelimitedList(IList ilist)
    {
        IList<Item> list = ilist as IList<Item>;
        if (list == null)
            return null;

        // build a comma-delimited list of names to display in a control
        List<string> names = list.Select(it => it.Name).ToList();
        StringBuilder sb = new StringBuilder();
        bool comma = false;
        foreach (var name in names)
        {
            if (comma)
                sb.Append(", ");
            else
                comma = true;
            sb.Append(name);
        }
        return sb.ToString();
    }
私有字符串CreateCommaDelimitedList(IList-IList)
{
IList list=IList作为IList;
if(list==null)
返回null;
//生成以逗号分隔的名称列表以显示在控件中
List Name=List.Select(it=>it.Name.ToList();
StringBuilder sb=新的StringBuilder();
布尔逗号=假;
foreach(名称中的变量名称)
{
if(逗号)
某人加上(“,”);
其他的
逗号=真;
某人(姓名);
}
使某人返回字符串();
}