【问题标题】:ItemGridView ItemClick on Windows Store AppItemGridView ItemClick on Windows Store App
【发布时间】:2013-10-08 08:34:48
【问题描述】:

我正在使用 Windows 8 商店应用程序。在这个项目中。我需要将数据发送到另一个页面。计划是,我在 MainPage.xaml 中有一个 ItemGridView,我单击新闻的图像,我需要将该新闻的 ARTICLE ID 发送到下一页,并且必须使用该 ID 创建一篇文章。

我用这个做了这个 windows phone 8 应用程序;

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


    }

这是 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)
        {
        }
    }

【问题讨论】:

    标签: c# xaml windows-store-apps


    【解决方案1】:

    点击事件不需要在gridview中选择一个项目,所以你选择的项目有可能是空的。试试这个吧。

    private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
    {
        this.Frame.Navigate(typeof (BasicPage1),
            ((MyWebApi.MainPageHeadline) e.ClickedItem).ARTICLEID);
    }
    

    注意e.ClickedItem 的使用,它应该是绑定到可视元素的数据项。

    【讨论】:

    • 感谢您的回答。当我在下面调试时,我在 Visual Studio 中看到下面的 ID,但是,当我继续前进时,它说“值不能为空。参数名称:键”并导航“ frameState[_pageKey] = pageState;"是下一页cs代码的原因吗?你能帮我解决一下吗
    • @KuthayGümüş 你能分享两个页面背后的代码吗?这样判断有点困难
    【解决方案2】:

    试试这个,我希望它会开始工作

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

    我已经添加了对 LayoutAwarePage 的 OnNavigatedTo 方法的调用

    【讨论】:

    • 是的,您正在从 LayoutAwarePage 继承您的页面,并且在该页面的 OnNavigatedTo 事件中它存储导航相关信息。当您在页面中覆盖该方法时,该方法的基本版本没有被调用,并且导航相关信息没有被执行,因此您收到了错误。请将其标记为答案!:)
    猜你喜欢
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多