未更新包含所选项目的ListPicker

时间:2014-04-26 19:57:45

标签: c# windows-phone

我有一个用于创建和编辑项目的表单。表单的一部分是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不会更新并显示原始值。

1 个答案:

答案 0 :(得分:3)

这是因为ListPicker的完整模式是一个不同的页面,因此在用户完成选择项目之后立即触发OnNavigatedTo()事件,就在ListPicker SelectedItems更改为Back之前新的选择。

避免恢复用户选择的简单解决方案是检查导航模式是否为ListPicker(这是if (e.NavigationMode != NavigationMode.Back) { categoryList.ItemsSource = Categories; categoryList.SelectedItems = edited_object.Categories; } 完整模式触发的导航模式,以返回编辑页面):

{{1}}