none
怎样给listview异步绑定数据? RRS feed

  • 问题

  •  public MainPage()
            {
                this.InitializeComponent();
                AddResource();
            }

    private async void AddResource() 
            {
                groupedItemsViewSource.Source = await ReadSMSListBySource();
            } private async Task<ObservableCollection<SMSData>> ReadSMSListBySource() 
            {
                ObservableCollection<SMSData> ItemGroups=new ObservableCollection<SMSData>();
                if (device == null)
                    device = await SmsDevice.GetDefaultAsync();
                if (device != null)
                {
                    for (uint i = 1; i <= device.MessageStore.MaxMessages; i++)
                    {
                        try
                        {
                            ISmsMessage msg = await device.MessageStore.GetMessageAsync(i);
                            ISmsTextMessage textMsg = msg as ISmsTextMessage;
                            if (textMsg != null)
                            {

                                SMSData smsdata = new SMSData();
                                smsdata.id = textMsg.Id.ToString();
                                smsdata.From= textMsg.From;
                                smsdata.SMSDate = textMsg.Timestamp.DateTime.ToString();
                                smsdata.Content = textMsg.Body;
                                ItemGroups.Add(smsdata);
                            }
                        }
                        catch (Exception ex)
                        {


                        }
                    }
                }
                else
                {

                }
                return ItemGroups;
                
            }

    xaml:

    <ListView Name="messageList" ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"  FontSize="24" Grid.Column="1" HorizontalAlignment="Left"  Margin="0,0,0,0" Grid.Row="1" VerticalAlignment="Top" Width="1180" Foreground="Black">
                                    <ListView.Background>
                                        <SolidColorBrush Color="#C9DAEE" Opacity="0.8"/>
                                    </ListView.Background>
                                    <ListView.GroupStyle>
                                        <GroupStyle>
                                            <GroupStyle.HeaderTemplate>
                                                <DataTemplate>
                                                    <StackPanel Orientation="Horizontal">
                                                            <TextBlock Text="{Binding From}"  Width="250"/>
                                                            <TextBlock Text="{Binding SMSDate}"  Width="250"/>
                                                            <TextBlock Text="{Binding Content}" TextWrapping="Wrap" Width="680"/>
                                                        <Line Fill="White"></Line>
                                                    </StackPanel>
                                                </DataTemplate>
                                            </GroupStyle.HeaderTemplate>
                                        </GroupStyle>
                                    </ListView.GroupStyle>     
                                </ListView>

    2012年8月16日 8:50

答案

  • 你没有使用分组,而只是将ItemGroups中元素一次展现,所以你不需要 GroupStyle ,而只需要 定义 ListView.ItemTemplate 即可:

    <ListView Name="messageList" ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"  FontSize="24" Grid.Column="1" HorizontalAlignment="Left"  Margin="0,0,0,0" Grid.Row="1" VerticalAlignment="Top" Width="1180" Foreground="Black">
        <ListView.Background>
            <SolidColorBrush Color="#C9DAEE" Opacity="0.8"/>
        </ListView.Background>
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding From}"  Width="250"/>
                        <TextBlock Text="{Binding SMSDate}"  Width="250"/>
                        <TextBlock Text="{Binding Content}" TextWrapping="Wrap" Width="680"/>
                    <Line Fill="White"></Line>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>     
    </ListView> 


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月20日 8:38
    版主

全部回复

  • listview老是出不来
    2012年8月16日 8:50
  • 貌似你的数据结构层次有问题
    2012年8月17日 7:28
  • 你没有使用分组,而只是将ItemGroups中元素一次展现,所以你不需要 GroupStyle ,而只需要 定义 ListView.ItemTemplate 即可:

    <ListView Name="messageList" ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"  FontSize="24" Grid.Column="1" HorizontalAlignment="Left"  Margin="0,0,0,0" Grid.Row="1" VerticalAlignment="Top" Width="1180" Foreground="Black">
        <ListView.Background>
            <SolidColorBrush Color="#C9DAEE" Opacity="0.8"/>
        </ListView.Background>
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding From}"  Width="250"/>
                        <TextBlock Text="{Binding SMSDate}"  Width="250"/>
                        <TextBlock Text="{Binding Content}" TextWrapping="Wrap" Width="680"/>
                    <Line Fill="White"></Line>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>     
    </ListView> 


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月20日 8:38
    版主