Data not displaying (C# UWP)

霸气de小男生 提交于 2019-12-12 03:36:33

问题


I created List like this:

 using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WooCommerceNET;
using WooCommerceNET.WooCommerce;

namespace xBindDataMilano.Models
{

    public class Orders
    {
        public string Date { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }


    }
    public class OrderManager
    {

        public static async Task<List<Orders>> GetOrders_1()
        {



            RestAPI rest = new RestAPI("http://simplegames.com.ua/wp-json/wc/v1/", "ck_9d64c027d2c5f81b8bed3342eeccc6d337be813d", "cs_60697b1e6cbdeb8d62d19e0765e339f8e3334754");
            WCObject wc = new WCObject(rest);
            //Get all products
            var orders = await wc.GetOrders();

            Debug.WriteLine(" SMOTRET TUT");



            var order = new List<Orders>();
            order.Add(new Orders { Date = "" + orders[0].date_created, Name = "" + orders[0].billing.first_name, Adress = "" + orders[0].shipping.address_1 + "                     " + orders[0].shipping.address_2 });
            order.Add(new Orders { Date = "" + orders[1].date_created, Name = "" + orders[1].billing.first_name, Adress = "" + orders[1].shipping.address_1 + "                     " + orders[1].shipping.address_2 });
            order.Add(new Orders { Date = "" + orders[2].date_created, Name = "" + orders[2].billing.first_name, Adress = "" + orders[2].shipping.address_1 + "                     " + orders[2].shipping.address_2 });
            order.Add(new Orders { Date = "" + orders[3].date_created, Name = "" + orders[3].billing.first_name, Adress = "" + orders[3].shipping.address_1 + "                     " + orders[3].shipping.address_2 });
            order.Add(new Orders { Date = "" + orders[4].date_created, Name = "" + orders[4].billing.first_name, Adress = "" + orders[4].shipping.address_1 + "                     " + orders[4].shipping.address_2 });



            return order;



        }




    }

}

And try to display it like this:

    using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using xBindDataMilano.Models;



namespace Milano
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class Test : Page
    {

        private List<Orders> Orders; 
        public Test()
        {
            this.InitializeComponent();
            Disp();
        }

        public async void Disp() {

            Orders = await OrderManager.GetOrders_1();


        }

        private void GridView_ItemClick(object sender, ItemClickEventArgs e)
        {


        }
    }
}

My xaml file:

  <Page
    x:Class="Milano.Test"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Milano"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="using:xBindDataMilano.Models"
    mc:Ignorable="d">


<Page.Resources>
    <DataTemplate x:DataType="data:Orders" x:Key="BookDataTemplate">
        <StackPanel HorizontalAlignment="Center">
                <TextBlock FontSize="16" Text="{x:Bind Date}" HorizontalAlignment="Center" Foreground="#FF0C0B0B" />
                <TextBlock FontSize="16" Text="{x:Bind Name }" HorizontalAlignment="Center" Foreground="#FF0C0B0B" />
                <TextBlock FontSize="10" Text="{x:Bind Adress}" HorizontalAlignment="Center"  Foreground="#FF0C0B0B"/>
        </StackPanel>
    </DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="20">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>

        <GridView ItemsSource="{x:Bind Orders}" 
                  IsItemClickEnabled="True" 
                  ItemClick="GridView_ItemClick"
                  ItemTemplate="{StaticResource BookDataTemplate}">
        </GridView>


        <TextBlock Grid.Row="1" 
                   Name="ResultTextBlock" 
                   FontSize="24" 
                   Foreground="Red" 
                   FontWeight="Bold" 
                   Margin="0,20,0,0" />

</Grid>
</Page>

But I get white screen and not errors. I waiting about 2 minutes, but app didn't crash and data didn't shows

Why I didn't see data?

Thank's for help very much!


回答1:


The x:Bind is performing a one-time binding meaning that the ItemsSource of your GridView is set when your page is loaded. It is set to a null value since your Orders property is still null at this time.

In your async method, you are initializing the Orders property with your data but you are never notifying the GridView that the property has been set.

Depending on what you try to achieve, you can juste request a refresh of the binding using Bindings.Update(). Which will basically refresh all the bindings.

public async void Disp() 
{
   Orders = await OrderManager.GetOrders_1();
   Bindings.Update();
}

Or you can use a dependency property to store your list and change the binding to a one-way binding.

public static readonly DependencyProperty OrdersProperty = DependencyProperty.Register(nameof(Orders), typeof(List<Order>), typeof(Test), new PropertyMetadata(null));

public List<Order>Orders
{
    get { return (List<Order>) GetValue(OrdersProperty); }
    set { SetValue(OrdersProperty, value); }
}


来源:https://stackoverflow.com/questions/39165185/data-not-displaying-c-uwp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!