我有一个ListPicker,其items源是一个可观察的集合。我在此列表中添加了一个上下文菜单,以便用户可以长按任何项目来编辑/删除它。我有两个关于删除的问题:
1-如果我从可观察集合中删除任何项目,则更改不会反映在完整模式中,我必须关闭选择器并重新打开,然后,我可以看到该项目已被删除
2-如果要删除的项目是最后一项,则删除它将触发异常:System.InvalidOperationException: SelectedItem must always be set to a valid value
这是我的xaml的一部分:
<toolkit:ListPicker Header="Shipping Addresses" Name="lst_ShippingAddresses" ExpansionMode="FullScreenOnly">
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding AddressCaption}" Margin="0,10" FontSize="26"/>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Edit" Click="EditShippingAddress"/>
<toolkit:MenuItem Header="Delete" Click="DeleteShippingAddress"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</StackPanel>
</DataTemplate>
</toolkit:ListPicker>
这是删除功能:
private void DeleteShippingAddress(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
MenuItem item = sender as MenuItem;
ShippingAddress address = item.DataContext as ShippingAddress;
if (lst_DeliveryAddresses.SelectedItem == address)
{
if (lst_DeliveryAddresses.Items.Count == 1) // last element in list
{
shippingAddresses.Clear();
}
else
{
if (lst_DeliveryAddresses.SelectedIndex == 0) // first element
lst_DeliveryAddresses.SelectedIndex = lst_DeliveryAddresses.SelectedIndex + 1;
else
lst_DeliveryAddresses.SelectedIndex = lst_DeliveryAddresses.SelectedIndex - 1;
shippingAddresses.Remove(address);
}
}
else
{
shippingAddresses.Remove(address);
}
});
}
如何在完整模式下刷新数据源?我试过lst_DeliveryAddresses.UpdateLayout()
但没有用。
如何在不获取此异常的情况下清除ListPicker的数据源?
请帮助,谢谢!