C# ItemGridView项目单击Windows应用商店应用程序
我使用的是windows 8应用商店应用程序。在这个项目中。我需要将数据发送到另一个页面。计划是,我在MainPage.xaml中有一个ItemGridView,我单击新闻的图像,我需要将该新闻的文章ID发送到下一页,并且必须使用该ID创建一篇文章 我用这个做了这个WindowsPhone8应用程序C# ItemGridView项目单击Windows应用商店应用程序,c#,xaml,windows-store-apps,C#,Xaml,Windows Store Apps,我使用的是windows 8应用商店应用程序。在这个项目中。我需要将数据发送到另一个页面。计划是,我在MainPage.xaml中有一个ItemGridView,我单击新闻的图像,我需要将该新闻的文章ID发送到下一页,并且必须使用该ID创建一篇文章 我用这个做了这个WindowsPhone8应用程序 private void MainLongListSelectorSelectionChanged(object sender, SelectionChangedEventArgs e) {
private void MainLongListSelectorSelectionChanged(object sender, SelectionChangedEventArgs e)
{
NavigationService.Navigate(
new Uri(
"/DetailsPage.xaml?selectedIndex=" +
((MyWebApi.Headline) MainLongListSelector.SelectedItem).ARTICLEID, UriKind.Relative));
}
在win store应用程序中,我尝试了这个
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
this.Frame.Navigate(typeof (BasicPage1),
((MyWebApi.MainPageHeadline) itemGridView.SelectedItem).ARTICLEID);
}
我也这样试过,
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
var articleid = ((MyWebApi.MainPageHeadline) itemGridView.SelectedItem).ARTICLEID;
this.Frame.Navigate(typeof (BasicPage1), articleid);
}
但是我得到了
“对象引用未设置为对象的实例。”
在队伍的尽头
我无法使用此命令获取ID的值。还有其他建议吗?有什么建议吗
多谢各位
更新:
这是MainPage.xaml.cs
public sealed partial class MainPage : try012.Common.LayoutAwarePage
{
private string _json = "";
private MyWebApi.RootObject Headlines { get; set; }
public MainPage()
{
this.InitializeComponent();
}
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
const string urlt = "MyWebApiURL";
var hWebRequestt = (HttpWebRequest)WebRequest.Create(urlt);
hWebRequestt.Method = "GET";
hWebRequestt.BeginGetResponse(MainLongListSelectorLoadCompletedt, hWebRequestt);
}
private void MainLongListSelectorLoadCompletedt(IAsyncResult ar)
{
var request = (HttpWebRequest)ar.AsyncState;
var response = (HttpWebResponse)request.EndGetResponse(ar);
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
_json = streamReader.ReadToEnd();
Headlines = JsonConvert.DeserializeObject<MyWebApi.RootObject>(_json);
}
if (Headlines.MainPageHeadline.Count > 0)
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
itemGridView.ItemsSource = Headlines.MainPageHeadline.ToList();
});
}
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
this.Frame.Navigate(typeof(BasicPage1),((MyWebApi.MainPageHeadline)e.ClickedItem).ARTICLEID);
}
}
公共密封部分类主页面:try012.Common.LayoutAwarePage
{
私有字符串_json=“”;
私有MyWebApi.RootObject标题{get;set;}
公共主页()
{
this.InitializeComponent();
}
受保护的覆盖无效加载状态(对象导航参数,字典页面状态)
{
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
常量字符串urlt=“mywebapirl”;
var hWebRequestt=(HttpWebRequest)WebRequest.Create(urlt);
hWebRequestt.Method=“GET”;
HWebRequest.BeginGetResponse(主长列表选择器或加载完成T,HWebRequest);
}
私有void MainLongListSelectorLoadCompletedt(IAsyncResult ar)
{
var request=(HttpWebRequest)ar.AsyncState;
var response=(HttpWebResponse)request.EndGetResponse(ar);
使用(var streamReader=newstreamreader(response.GetResponseStream()))
{
_json=streamReader.ReadToEnd();
标题=JsonConvert.DeserializeObject(_json);
}
如果(Headlines.MainPageHeadline.Count>0)
Dispatcher.RunAsync(CoreDispatcherPriority.Normal,()=>
{
itemGridView.ItemsSource=Headlines.MainPageHeadline.ToList();
});
}
私有void itemGridView\u ItemClick(对象发送者,ItemClickEventArgs e)
{
this.Frame.Navigate(typeof(BasicPage1),((MyWebApi.MainPageHeadline)e.ClickedItem.ARTICLEID);
}
}
这是BasicPage1.xaml.cs
public sealed partial class BasicPage1 : try012.Common.LayoutAwarePage
{
public BasicPage1()
{
this.InitializeComponent();
}
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
}
protected override void SaveState(Dictionary<String, Object> pageState)
{
}
}
公共密封部分类基本页面1:try012.Common.LayoutAwarePage
{
公共基础设施1()
{
this.InitializeComponent();
}
受保护的覆盖无效加载状态(对象导航参数,字典页面状态)
{
}
受保护的覆盖无效保存状态(字典页面状态)
{
}
}
单击事件不需要在gridview中选择项目,因此您选择的项目可能为空。试试这个
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
this.Frame.Navigate(typeof (BasicPage1),
((MyWebApi.MainPageHeadline) e.ClickedItem).ARTICLEID);
}
注意使用了
e.ClickedItem
,它应该是绑定到可视元素的数据项。单击事件不需要在gridview中选择项,因此您选择的项可能为空。试试这个
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
this.Frame.Navigate(typeof (BasicPage1),
((MyWebApi.MainPageHeadline) e.ClickedItem).ARTICLEID);
}
注意
e.ClickedItem的用法,它应该是绑定到可视元素的数据项。试试这个,我希望它能开始工作
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
const string urlt = "MyWebApiURL";
var hWebRequestt = (HttpWebRequest)WebRequest.Create(urlt);
hWebRequestt.Method = "GET";
hWebRequestt.BeginGetResponse(MainLongListSelectorLoadCompletedt, hWebRequestt);
}
我已经添加了对OnNavigatedTo方法LayoutWarePage的调用。试试这个,我希望它能开始工作
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
const string urlt = "MyWebApiURL";
var hWebRequestt = (HttpWebRequest)WebRequest.Create(urlt);
hWebRequestt.Method = "GET";
hWebRequestt.BeginGetResponse(MainLongListSelectorLoadCompletedt, hWebRequestt);
}
我已经添加了对LayoutWarePage的OnNavigatedTo方法的调用,谢谢您的回答。我在visual studio中看到了下面的内容,当我调试下面的内容时,它会获取ID,但是,当我向前看时,它会说“值不能为null。参数名称:key”并导航“frameState[\u pageKey]=pageState”;这是下一页cs代码的原因吗?你能帮我一下吗it@KuthayGümüş你能分享这两个页面的代码吗。像这样判断有点困难谢谢你的回答。我在visual studio中看到,当我在下面调试时,它会得到ID,但是,当我前进时,它会说“值不能为null。参数名:key”并导航“frameState[\u pageKey]=pageState”;这是下一页cs代码的原因吗?你能帮我一下吗it@KuthayGümüş你能分享这两个页面的代码吗。像这样很难判断,结果是你从LayoutWarePage继承了你的页面,在该页面的OnNavigatedTo事件中,它存储了与导航相关的信息。当您在页面中重写该方法时,没有调用该方法的基本版本,也没有执行与导航相关的信息,因此您得到了错误。请将其标记为答案!:)是的,发生的情况是,您从LayoutWarePage继承了您的页面,并且在该页面的OnNavigatedTo事件中,它存储了与导航相关的信息。当您在页面中重写该方法时,没有调用该方法的基本版本,也没有执行与导航相关的信息,因此您得到了错误。请将其标记为答案!:)