我是 Windows Phone 7 开发的新手。
在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,必须将特定记录添加到另一个列表框中。listbox.ItemSource
当我尝试将该列表分配给它时,我完成了列表框选择并通过参数将选定项传递给另一个页面ArgumentNullException
。
请帮我解决这个问题。
谢谢。
我是 Windows Phone 7 开发的新手。
在我的第一个应用程序中,我想在不同的页面中创建两个带有复选框的列表框,并用一些数据填充第一个列表框。当我在第一个列表框中选择一些记录时,必须将特定记录添加到另一个列表框中。listbox.ItemSource
当我尝试将该列表分配给它时,我完成了列表框选择并通过参数将选定项传递给另一个页面ArgumentNullException
。
请帮我解决这个问题。
谢谢。
首先,正如您所指出的,正在抛出 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 中有一个虚拟列表中读取的那样,当我单击任何项目时,它会将我带到另一个页面,其中还有另一个列表,其中填充了从我的初始选择中生成的数据。如您所见,我将选择作为查询字符串参数传递,就像我在对此答案的评论中所解释的那样。
希望这可以解决您的问题,我期待您接受此解决方案作为您问题的答案。
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))
}
}
而在第二页...
<`私有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;
}'