Windows phone 7 我想使用silverlight在windows7的页面导航中将列表作为参数传递,并在目标页面中访问它们
我是WindowsPhone7开发的新手 在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,这些特定的记录必须添加到另一个列表框中。我完成了listbox选择,还通过参数将selecteditem传递到另一个页面,当我尝试将该列表分配给listbox.ItemSource时,它抛出ArgumentNullException 请帮我解决这个问题Windows phone 7 我想使用silverlight在windows7的页面导航中将列表作为参数传递,并在目标页面中访问它们,windows-phone-7,Windows Phone 7,我是WindowsPhone7开发的新手 在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,这些特定的记录必须添加到另一个列表框中。我完成了listbox选择,还通过参数将selecteditem传递到另一个页面,当我尝试将该列表分配给listbox.ItemSource时,它抛出ArgumentNullException 请帮我解决这个问题 谢谢 首先,正如您所指出的,正在抛出ArgumentNullExce
谢谢 首先,正如您所指出的,正在抛出ArgumentNullException。因此,基本上,当您对ItemsSource进行赋值时,您提供的是null。换句话说,您认为从对象页面收到的对象为空 其次,如果不提供任何源代码,就很难帮助您调试问题。但是,一般来说,当您在第2页的列表框中填充时,您是否能够使用虚拟数据并从代码隐藏(即,不从XAML)进行测试?因此,暂时忽略数据的传递。只需确保在加载第二个页面时,列表框中填充了在该页面的代码隐藏中创建的虚拟数据。如果这样做有效,那么你的问题就更简单了 希望这能有所帮助 //-添加示例代码-// Firstpage.xaml Secondpage.xaml Secondpage.xaml.cs 因此,正如您从第一页中可以看到的,我在第一页中有一个虚拟列表,当我单击任何项目时,它会将我带到另一个页面,其中有另一个列表,其中填充了我最初选择的数据。正如您所见,我将选择作为querystring参数传递,正如我在对这个答案的评论中所解释的那样
希望这能解决您的问题,我期待您接受此解决方案作为您问题的答案。在第二页
public partial class MainPage : PhoneApplicationPage
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
//adding data to listbox on page load event//
for (int i = 0; i < 20; i++)
{
id = i + 1;
name = "productname" + i;
quantity = i + 2 / 2;
productlist.Add(new ProductList(id, name, quantity));
}
lstpro.ItemsSource = productlist;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
//using PhoneApplicationService.Current.State to store the list//
PhoneApplicationService.Current.State["yourparam"] = lstpro.SelectedItems;
NavigationService.Navigate(new Uri("/res.xaml", UriKind.Relative))
}
}
在第二页中,当我用来填充一些虚拟数据时,它会在导航时被填充,但是当我试图将数据作为参数传递时,它不会被填充,因为int i=0;i<20;i++{id=i+1;name=productname+i;quantity=i+2/2;productlist.Addnew ProductListid,name,quantity;}lstpro.ItemsSource=productlist;}私有无效按钮1\u Clickobject sender,RoutedEventTargets e{res\u res=new reslstpro.SelectedItems;NavigationService.NavigationNew Uri/res.xaml,UriKind.Relative;}您能否编辑您的初始问题并粘贴代码?您是如何将数据传递到下一页的,以及接收数据的代码。从上面提供的复制粘贴来看,您似乎没有查询字符串,而是要导航到页面的uri。换句话说,您应该这样做:NavigationService.NavigateNewURI/res.xaml?id=1&name=A,UriKind.Relative。但是,您可能不想通过querystring传递数据,但当您在第1页选择某个内容并在第2页检索该数据时,可能会将数据保存在isolatedstorage中。我不使用独立存储,我只是在代码res\u res=new reslstpro.selecteditems中发送selecteditems作为参数,我可以在其中访问列表。我认为,当我在构造函数中传递参数时,网格无法正确加载。因此,listbox抛出的空异常修改了我上面的答案,以显示我的观点,这是解决您问题的一个方法就我所知,这是个问题。
FirstListBox.DataContext = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
private void HandleSelection(object sender, SelectionChangedEventArgs e)
{
String selection = (String)FirstListBox.SelectedItem;
NavigationService.Navigate(new Uri("/Secondpage.xaml?id=" + selection, UriKind.Relative));
}
<ListBox x:Name="OtherListBox" Grid.Row="1" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="32" Margin="12"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
String id = null;
NavigationContext.QueryString.TryGetValue("id", out id);
if (id != null)
{
List<String> dummyData = new List<string>();
for (int i = 0; i < 12; i++)
{
dummyData.Add(id + " - " + i);
}
OtherListBox.DataContext = dummyData;
}
}
public partial class MainPage : PhoneApplicationPage
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
//adding data to listbox on page load event//
for (int i = 0; i < 20; i++)
{
id = i + 1;
name = "productname" + i;
quantity = i + 2 / 2;
productlist.Add(new ProductList(id, name, quantity));
}
lstpro.ItemsSource = productlist;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
//using PhoneApplicationService.Current.State to store the list//
PhoneApplicationService.Current.State["yourparam"] = lstpro.SelectedItems;
NavigationService.Navigate(new Uri("/res.xaml", UriKind.Relative))
}
}
//In The onNavigatedTo Event assign the stored list to the variable//
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
var i= PhoneApplicationService.Current.State["yourparam"];
iList1 = (IList) i ;//convert object to list//
lstpro.ItemsSource = iList1;
}'