Windows phone 7 我想使用silverlight在windows7的页面导航中将列表作为参数传递,并在目标页面中访问它们

Windows phone 7 我想使用silverlight在windows7的页面导航中将列表作为参数传递,并在目标页面中访问它们,windows-phone-7,Windows Phone 7,我是WindowsPhone7开发的新手 在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,这些特定的记录必须添加到另一个列表框中。我完成了listbox选择,还通过参数将selecteditem传递到另一个页面,当我尝试将该列表分配给listbox.ItemSource时,它抛出ArgumentNullException 请帮我解决这个问题 谢谢 首先,正如您所指出的,正在抛出ArgumentNullExce

我是WindowsPhone7开发的新手

在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,这些特定的记录必须添加到另一个列表框中。我完成了listbox选择,还通过参数将selecteditem传递到另一个页面,当我尝试将该列表分配给listbox.ItemSource时,它抛出ArgumentNullException

请帮我解决这个问题


谢谢

首先,正如您所指出的,正在抛出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;

    }'