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的代码段。 请逐行解释此代码块的工作情况。
答案 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中的对象。