locked
新手求助,ListBox时绑定的对象数组的问题,好人一路平安 RRS feed

  • 问题

  • 这个是我用WCF从服务器数据库端拿到数据步骤,list.ItemsSource有正确的返回值但是在手机上绑定的数据不显示:

       List<MyRage> rageImages = new List<MyRage>();
                        for (int i = 0; i < e.Result.Count; i++)
                        {
                            rageImages.Add(new MyRage { Title = e.Result.ElementAt(i).Title, Likenum = e.Result.ElementAt(i).Likenum });
                            MyRage rage = new MyRage();
                            rage.Title = e.Result.ElementAt(i).Title;
                            rage.Likenum = e.Result.ElementAt(i).Likenum;
                            rageImages.Add(rage);
                        }
                        list1.ItemsSource = rageImages;

    MyRage:

    namespace SilverlightDBDemo.Web
    {
        public class MyRage
        {
             [DataMember()]
            private string url;
            public  string Url { get; set; }
             [DataMember()]
            private string pictureurl;
            public string Pictureurl { get; set; }
             [DataMember()]
            private string likenum;
            public string Likenum { get; set; }
             [DataMember()]
            private string uploadtime;
            public string Uploadtime { get; set; }
             [DataMember()]
            private string title;
            public string Title { get; set; }
             [DataMember()]
            private byte[] picture;
            public byte[] Picture { get; set; }

    Xaml绑定代码:

    <ListBox Name="list1" HorizontalAlignment="Stretch" VerticalContentAlignment="Stretch"  ItemsSource="{Binding}" >
     <ListBox.ItemTemplate>
       <DataTemplate>
        <Grid>
         <Grid.ColumnDefinitions>
          <ColumnDefinition Width="2*"/>
          <ColumnDefinition Width="*" />
         </Grid.ColumnDefinitions>
    <HyperlinkButton Grid.Column="0" Content="{Binding Title}" FontSize="30" />
    <TextBlock Grid.Column="1" Text="喜欢人数:" FontSize="30" />
    <TextBlock Grid.Column="1" Text="{Binding Likenum}" FontSize="30" />
         </Grid>
        </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>




    2012年5月14日 5:00

全部回复

  • 你好

    或者可以嘗試在 XAML 上 remove 

     ItemsSource="{Binding}"

    試試看
    應該是不用在 XAML 上加入

     ItemsSource="{Binding}"

    的..因為你在Code Behind加入了

       list1.ItemsSource = rageImages;

    Please correct me if my concept is wrong


    Chi

    2012年5月14日 5:53
  • 你好Chi

    我在XAML上面删除了这句,但是还是不行,


    现在出现的问题就是不管什么方法上面就是不显示出来
    2012年5月14日 6:31
  • 你好,

    我没看出绑定有什么问题,如果数据返回正确的话,应该是可以成功显示的。

    1.建议再次确认在for循环之后设断点,查看rageImages是否有值,并且其中的MyRage.Title MyRage.Likenum是否都有值。

    2.因为你的Listbox没有给定具体的宽度和长度,完全由ListBox之外的控件大小决定, 所以请查看ListBox外部的控件大小是否合适。

    3.一个显示格式的问题,建议StackPanel承装两个TextBlock。否则两个TextBlock会重合在一起。

                            <StackPanel Grid.Column="1" Orientation="Horizontal">
                                <TextBlock  Text="喜欢人数:" FontSize="30" />
                                <TextBlock Text="{Binding Likenum}" FontSize="30" />
                            </StackPanel>

    2012年5月15日 2:22
  • 谢谢你的回复,rageImages是有值,并且其中的MyRage.Title MyRage.Likenum是都有值,而且是对的,我取的8个都有返回值。 然后我也在StackPanel里加入了DataContent,一个很诡异的地方出现了,<TextBlock  Text="喜欢人数:" FontSize="30" />显示也有8个,虽然不排除是巧合。希望你能帮我,谢谢


    2012年5月16日 12:23
  • 你好,

    能具体说下你是怎样在StackPanel中添加DataContent的么?

    目前我从代码中看不出问题, 最好可以将程序打包上传至SkyDrive,这样我可以在我这边具体看一下。

    2012年5月17日 2:11
  • 你好 Ding,

    我其实也很想把程序发出来,但是由于绑定数据是绑定WCF WebService传过来的数据,那边的数据库是用MongoDB做的,所以全部发出来可能有些麻烦,单发WindowsPhone 的程序没法运行,非常想知道这里的动态绑定解决方法,写C#代码倒是能通过For循环语句搞定赋值语句,请问您在北京吗?如果您在,希望在您方便的时候登门拜访。我还是先发DataContent那段发出来吧。

    <ListBox Name="list1" HorizontalAlignment="Stretch" VerticalContentAlignment="Stretch" >
       <ListBox.ItemTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal" DataContext="{Binding Source={StaticResource rageImages}}">
            <HyperlinkButton  Content="{Binding Titles, Mode=OneWay}" FontSize="30" />
            <TextBlock Text="喜欢人数:" FontSize="30" />
            <TextBlock Text="{Binding LikeNums, Mode=OneWay}" FontSize="30" />
          </StackPanel>
         </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    就是按您说的把Grid改成StackPanel  然后再里面加了DataContext,就出现了那种效果,现在我已经用最原始方法弄出来了~~~~哎,不过还是想搞懂为什么动态绑定失败了


    2012年5月17日 12:18
  • 你好,

    我们目前在上海,就不方便现场解决问题了。

    我看到你最近编辑回复说已经解决了, 可以分享下具体是用什么方法解决的么?

    2012年5月21日 10:06
  • 你好Ding,

    我用的是最原始的办法,没有数据绑定了,C#代码里面全部用for加new搞定的~~~~~~知道这种方法很2,但是还是很想知道动态数据绑定为什么就是错了

    2012年5月22日 13:25
  • 刚又看了眼你的代码,发现一个问题

             [DataMember()]
           
    private string url;
           
    public  string Url { get; set; }
    这个地方[DataMemeber]应该标注在public property上,如下

            private string url;

             [DataMember()]
            public  string Url { get; set; }

    同时Class的上面需要标注[DataContract]

    [DataContract]

    public class MyRage
    可以试一下改过后,问题是否可以解决

    2012年5月24日 9:43
  • 问题依旧,把[DataMember()]问题反而更严重了。具您回复已经八天了才回您的消息,实在不好意思。谢谢你的回答
    2012年5月31日 11:03