我有一个用于创建和编辑项目的表单。表单的一部分是ListPicker:
<toolkit:ListPicker x:Name="categoryList" SelectionMode="Multiple"
ItemsSource="{Binding Categories}" CacheMode="BitmapCache">
</toolkit:ListPicker>
ListPicker的后端代码:
public ItemsPage()
{
InitializeComponent();
categoryList.ItemsSource = Categories;
this.categoryList.SummaryForSelectedItemsDelegate += SumarizeItems;
}
private string SumarizeItems(IList items)
{
if (items != null && items.Count > 0)
{
string summarizedString = "";
for (int i = 0; i < items.Count; i++)
{
summarizedString += (string)items[i];
// If not last item, add a comma to seperate them
if (i != items.Count - 1)
summarizedString += ", ";
}
categoryList.Foreground = new SolidColorBrush(Colors.Black);
return summarizedString;
}
else
{
categoryList.Foreground = new SolidColorBrush(Colors.Gray);
return "...";
}
}
如果我在页面上创建一个新对象,ListPicker工作正常。 如果我以编辑模式转到页面,请在OnNavigatedTo()方法
中加载选定的值categoryList.ItemsSource = Categories;
categoryList.SelectedItems = edited_object.Categories;
所选类别已正确加载,但如果我在ListPicker的完整模式下更改它们,则ListPicker不会更新并显示原始值。
答案 0 :(得分:3)
这是因为ListPicker
的完整模式是一个不同的页面,因此在用户完成选择项目之后立即触发OnNavigatedTo()
事件,就在ListPicker
SelectedItems
更改为Back
之前新的选择。
避免恢复用户选择的简单解决方案是检查导航模式是否为ListPicker
(这是if (e.NavigationMode != NavigationMode.Back)
{
categoryList.ItemsSource = Categories;
categoryList.SelectedItems = edited_object.Categories;
}
完整模式触发的导航模式,以返回编辑页面):
{{1}}