windows phone databound app中DetailsPage.xaml.cs中的OnNavigatedTo方法的解释

时间:2014-02-15 07:08:53

标签: c# visual-studio data-binding windows-phone-8

  protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (DataContext == null)
        {
            string selectedIndex = "";
            if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
            {
                int index = int.Parse(selectedIndex);
                DataContext = App.ViewModel.Items[index];
            }
        }
    }

这是Windows phone数据绑定应用中DetailsPage.xaml.cs的代码段。 请逐行解释此代码块的工作情况。

2 个答案:

答案 0 :(得分:1)

检查一下,解释按照正在解释的代码行:

if (DataContext == null)

仅当DataContext当前为null(尚未设置)时才设置。

if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))

尝试获取具有参数key =“selectedItem”的查询字符串参数值。如果查询字符串中存在此参数,TryGetValue函数将返回true,否则它将返回false。因此,只有在查询字符串中提供“selectedItem”参数时才会执行下两行代码。

int index = int.Parse(selectedIndex);

selectedIndex的字符串值解析为整数值。

DataContext = App.ViewModel.Items[index];

将DetailsPage的DataContext设置为存储在Items属性中的索引= index的对象。

答案 1 :(得分:0)

if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))

我能理解的是,当加载页面时,QueryString加载了Dictionary类的实例。 然后使用此实例调用TryGetValue方法。这里selectedItem是dicionary类中元素的关键,第二个参数确保仅当且仅当在Dictionary类中存在具有键“selectedItem”的元素时,该方法才返回true。 或者,如果我们提供的查询字符串包含“selectedItem”。

int index = int.Parse(selectedIndex);

选定的索引包含与该键相关联的值,但它在字符串中,因此使用int类的parse方法,我们将其转换为整数类型并将其存储在索引变量中。

DataContext = App.ViewModel.Items[index];

然后将DetailPage的DataContext设置为位于等于index的位置的集合Items中的对象。