WP8 - 在网格列中显示Web服务的结果

时间:2013-10-15 13:26:58

标签: c# sql web-services linq-to-sql windows-phone-8

您好我已经构建了一个从SQL返回数据的WebService

    public void ListadoWebService()
    {
       // InitializeComponent();
        ServiceTours.ServiceToursClient cl = new ServiceTours.ServiceToursClient();
        cl.ListadoCompleted += new EventHandler<ListadoCompletedEventArgs>(Listado2);
        cl.ListadoAsync();
    }
    private void Listado2(object sender, ListadoCompletedEventArgs e)
    {
        listB.ItemsSource = e.Result;
    }

现在,我尝试在columns grid中显示数据。我认为它可以将binding数据作为textblock添加到特定列,但即使数据在e.Result中返回,我也无法显示数据。

我试过以下:

<ListBox x:Name="listB">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding id}" Grid.Column="0" />
    <TextBlock Text="{Binding name}" Grid.Column="1" />

                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

但我仍然有黑屏。

有人会帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

首先制作一个像

一样的getter setter方法
 public class test
    {
    public string Id{get;set;}
    public string Name{get;set;}

    public test(string id, string name)

    {
      Id=id;
      Name=name;
    }
     public test()

    {


    }

    than add your take one generc like 

    List<Test> lst=new List<test>();

    private void Listado2(object sender, ListadoCompletedEventArgs e)
        {
          lst.add(new test(id,name));
           listB.itemsource=lst;

        }

<ListBox x:Name="listB">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding Id}" Grid.Column="0" />
    <TextBlock Text="{Binding Name}" Grid.Column="1" />

                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

访问以下链接也可以获得更多想法

HOw to bind data in windows phone

How can I data bind a list of strings to a ListBox in WP7

希望它对你有用.....

答案 1 :(得分:1)

我可能在这里错了,但是一旦Listado2结束,e.Result不会立即存在吗?

我并不完全专业,但我会做的是将结果中的内容复制到可以保存更久的地方。

当我读到MansinhDodiya之前的回答时,他基本上是在告诉你同样的事情。

  1. 创建一个名为Item的类,其中包含两个属性(public string Id{get;set;}是属性)

    有更多的方法可以做到这一点,其中一种方法是转到代码隐藏(该页面的.xaml.cs并在那里创建类,其他的是在同一名称空间中创建一个新的第三个广告,设置新的命名空间并添加使用)。

    所以在页面的.xaml.cs中创建类似的类:

     class Item
     {
        public string Id {get;set;} //this is the first property i would later bind
        public string Name {get;set;} //this is the second property
    
        public Item(string id, string name)  // this is the contructor, every time
                                             // an instance of Item is created, this
                                             // method is called
        {
           Id = id;
           Name = name;
        }
     }
    
  2. 列出这些可访问的Items

    在该类的旁边,在页面类中,创建该列表的实例:

    List<Item> itemlist = new List<Item>();
    
  3. 将数据复制到List<Item>,然后将该列表设置为列表框的itemsSource

    Listado2内将e.Result中的内容复制到itemlist

    private void Listado2(object sender, ListadoCompletedEventArgs e)
    {
       ...copying from e.Result into itemList...
       listB.itemsource = itemList;
    }
    
  4. 然后将xaml绑定定义更改为属性的名称 - 在我的情况下:

    <ListBox x:Name="listB">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                ..omitted...
                   <TextBlock Text="{Binding Id}" Grid.Column="0" />
                   <TextBlock Text="{Binding Name}" Grid.Column="1" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>