无法显示数据

时间:2013-03-07 15:00:19

标签: c# xaml listview data-binding winrt-xaml

我不明白为什么但我无法在列表视图上显示数据。

我该怎么办?

这是我的代码:

<FlipView HorizontalAlignment="Left" Margin="209,52,0,0"
          VerticalAlignment="Top" Width="892" Height="432" Grid.Row="1">
    <ListView HorizontalAlignment="Left" Height="426" 
              VerticalAlignment="Top" Width="453" 
              Margin="433,0,0,0" DataContext="TwitterDataViewModel"
              ItemsSource="{Binding ListeTweet}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="132">
                    <Image Source="{Binding ImageUrl}" Height="73" 
                           Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/>
                    <StackPanel Width="370">
                        <TextBlock Text="{Binding Name}" Foreground="#FFC8AB14"
                                   FontSize="28" />
                        <TextBlock Text="{Binding Text}" TextWrapping="Wrap"
                                   FontSize="24" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</FlipView>

怎么回事?


我照看了我的TwitterDataViewModel,它是一个INotifyPropertyChanged类......

namespace App1
{
public class TwitterDataViewModel : INotifyPropertyChanged
{
    private User _user;
    public User User
    {
        get { return _user; }
        set
        {
            _user = value;
            RaisePropertyChanged("User");
        }
    }

    private List<Tweet> _listeTweet;
    public List<Tweet> ListeTweet
    {
        get { return _listeTweet; }
        set
        {
            _listeTweet = value;
            RaisePropertyChanged("ListeTweet");
        }
    }
    private List<User> _listeUser;
    public List<User> ListeUser
    {
        get { return _listeUser; }
        set
        {
            _listeUser = value;
            RaisePropertyChanged("ListeUser");
        }
    }



    private List<NameValueItem> _listeDonneesGraphiques;
    public List<NameValueItem> ListeDonneesGraphiques
    {
        get { return _listeDonneesGraphiques; }
        set
        {

            _listeDonneesGraphiques = value;
            RaisePropertyChanged("ListeDonneesGraphiques");
        }
    }

    public TweetViewModel tweetviewmodel { get; set; }
    public UserViewModel userviewmodel { get; set; }

    public TwitterCommand<object> ClickSearch { get; set; }

    readonly Page page;

    public TwitterDataViewModel(Page page)
    {
        tweetviewmodel = new TweetViewModel(page);
        userviewmodel = new UserViewModel(page);
        this.page = page;
        ClickSearch = new TwitterCommand<object>(AfficheDonnee); //bouton NEXT

    }

    void AfficheDonnee(object obj)                      //Méthode qui sera exécutée lors du click sur le bouton NEXT
    {          
                                     //Consiste à afficher les données précédemment récupérées.

        ListeTweet = tweetviewmodel.RecupererTweets(); //ok ca fonctionne
        //tweetviewmodel.TrouverMot();
        //tweetviewmodel.TrouverTweetSpecific();
        //Task.Run(async () => 
        //{
        //    //je fais une tâche et j'attend 15 minutes
        //    userviewmodel.GetScreenName();
        //    await Task.Delay(15 * 600);//15 minutes

        //});

        //Task.Run( () =>
        //{

        //    userviewmodel.GetScreenName();


        //});

        //User = userviewmodel.RecupererInfoUser();
      //  ListeUser = userviewmodel.GetScreenName();
        //ListeDonneesGraphiques = new List<NameValueItem>(); //Liste des données numérique qui va servir pour le graphique de données
        //tweetviewmodel.TrouverMot();                                                    //Problème à l'affichage

        //ListeDonneesGraphiques.Add((new NameValueItem() { Name = "Tweets", Value = userviewmodel.Users.NbStatus }));
        //ListeDonneesGraphiques.Add((new NameValueItem() { Name = "Following", Value = userviewmodel.Users.NbFollowing }));
        //ListeDonneesGraphiques.Add((new NameValueItem() { Name = "Followers", Value = userviewmodel.Users.NbFollowers }));
        //ListeDonneesGraphiques.Add((new NameValueItem() { Name = "Favorite", Value = userviewmodel.Users.NbFavorite }));
        //ListeDonneesGraphiques.Add((new NameValueItem() { Name = "Listed", Value = userviewmodel.Users.NbListe }));
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string prop)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(prop));
        }
    }
}

}

2 个答案:

答案 0 :(得分:0)

ItemsSource是依赖属性吗?或者使用INotifyPropertyChanged接口?

如果未通知用户界面正在填充数据,则不会显示任何内容

检查this ...

答案 1 :(得分:0)

当您将项目添加到List<>时,它不会更改 - 其内容会更改,但不会更改List本身。
将项添加到列表时,不会调用ListeTweet的setter。然而,你的吸气器是!

要解决您的问题,您可以将列表ListeTweet更改为ObservableCollection<Tweet>,这会在您向其添加项目时引发OnCollectionChanged事件。