-2

我是 Windows Phone 7 开发的新手。

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

请帮我解决这个问题。

谢谢。

4

3 回答 3

2

首先,正如您所指出的,正在抛出 ArgumentNullException。因此,基本上,当您对 ItemsSource 进行分配时,您提供的是空值。换句话说,您认为您从对象页面收到的对象为空。

其次,如果您不提供任何源代码,则很难帮助您调试问题。但是,一般来说,当您位于列表框被填充的第二页时,您是否能够使用虚拟数据和代码隐藏(即不是来自 XAML)进行测试?所以,暂时忽略数据的传递。只需确保在加载第二个页面时,列表框会填充您在该页面的代码隐藏中创建的虚拟数据。如果可行,那么您的问题就更简单了。

希望这会有所帮助。

//-- 添加示例代码-- //

第一页.xaml

<ListBox x:Name="FirstListBox" Grid.Row="1" ItemsSource="{Binding}" SelectionChanged="HandleSelection">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" FontSize="32" Margin="12"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

第一页.xaml.cs

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));
}

第二页.xaml

<ListBox x:Name="OtherListBox" Grid.Row="1" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" FontSize="32" Margin="12"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

第二页.xaml.cs

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;
    }
}

因此,正如您可以从我在 Firstpage 中有一个虚拟列表中读取的那样,当我单击任何项​​目时,它会将我带到另一个页面,其中还有另一个列表,其中填充了从我的初始选择中生成的数据。如您所见,我将选择作为查询字符串参数传递,就像我在对此答案的评论中所解释的那样。

希望这可以解决您的问题,我期待您接受此解决方案作为您问题的答案。

于 2012-09-08T06:57:27.440 回答
0
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))
    }

}
于 2012-09-10T05:07:03.083 回答
0

而在第二页...

<`私有IList iList1;

  //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;

    }'
于 2012-09-10T05:15:09.440 回答