gpt4 book ai didi

c# - ListPicker 在被解雇时不调用 SummaryForSelectedItemsDelegate

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:58 25 4
gpt4 key购买 nike

我正在使用多选 ListPicker(7.1/Mango 控制工具包中的新工具,从 2011 年 11 月开始)。

我的代码如下 - ListPicker 的“普通”用例,不同之处在于我使用新列表初始化 SelectedItems 依赖属性,以便我可以向其添加内容并正确初始化 ListPicker 的选定状态。虽然这个问题重现了我是否这样做......

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

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

这是一个错误吗?还有其他人遇到过这个吗?有解决方法吗?

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);
}
});

最佳答案

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

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

    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();
}

关于c# - ListPicker 在被解雇时不调用 SummaryForSelectedItemsDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com