【问题标题】:Binding data to ListView for Windows 8 app将数据绑定到 Windows 8 应用的 ListView
【发布时间】:2014-06-19 09:31:27
【问题描述】:

我希望有人能帮我解决这个问题,因为它让我发疯。我正在为一个工作项目编写原型应用程序,它也是我的第一个 Windows 8 应用程序。我要做的就是获取一个 ListView 控件来显示集合中的一些信息,我已经包含了下面的所有代码。我似乎无法让它与我真正想要显示的集合一起工作,但如果我制作一个测试类和集合,我可以很好地显示,代码也包括在内。我完全被这个弄糊涂了,所以它一定是我遗漏了一些明显的东西,可能只见树木不见森林。

任何指针将不胜感激。

测试代码(工作正常):

代码背后:

public class Person
{
    public string Firstname { get; set; }
    public string Surname { get; set; }
}

private List<Person> GetPeople()
    {
        var people = new List<Person>();

        people.Add(new Person() { Firstname = "John", Surname = "Smith" });
        people.Add(new Person() { Firstname = "Tom", Surname = "Jones" });
        people.Add(new Person() { Firstname = "Barry", Surname = "Thomas" });

        return people;
    }

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        OrdersListView.DataContext = this.GetPeople();
    }

XAML:

    <ListView x:Name="OrdersListView" HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding}" Width="auto" Height="auto">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="2">
                    <TextBlock Text="Name: " Margin="2" />
                    <TextBlock Text="{Binding Firstname}" Margin="2" />
                    <TextBlock Text="{Binding Surname}" Margin="2" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

实际代码(不显示):

代码背后:

private async Task<List<Order>> LoadData()
    {
        const string serviceUrl = "http://localhost:54879/";

        var client = new HttpClient
                     {
                         BaseAddress = new Uri(serviceUrl)
                     };

        HttpResponseMessage response = await client.GetAsync("api/orders");
        var orders = await response.Content.ReadAsAsync<Order[]>();

        return orders.ToList();
    }

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        OrdersListView.DataContext = this.LoadData();
    }

XAML:

<ListView x:Name="OrdersListView" HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding}" Width="auto" Height="auto">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="2">
                    <TextBlock Text="Order Ref: " Margin="2" />
                    <TextBlock Text="{Binding OrderReference}" Margin="2" />
                    <TextBlock Text="Name: " Margin="2" />
                    <TextBlock Text="{Binding Firstname}" Margin="2" />
                    <TextBlock Text="{Binding Surname}" Margin="2" />
                    <TextBlock Text="Address: " Margin="2" />
                    <TextBlock Text="{Binding Address1}" Margin="2" />
                    <TextBlock Text="{Binding Address2}" Margin="2" />
                    <TextBlock Text="{Binding TownCity}" Margin="2" />
                    <TextBlock Text="{Binding Country}" Margin="2" />
                    <TextBlock Text="{Binding Postcode}" Margin="2" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

【问题讨论】:

    标签: c# .net xaml listview windows-store-apps


    【解决方案1】:

    您必须将await 放在LoadData() 上,才能将DataContext 设置为Task 的结果。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        OrdersListView.DataContext = await this.LoadData();
    }
    

    【讨论】:

    • 啊!当然可以!我说这将是显而易见的。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多