Silverlight: трудности с синтаксисом ListBox и {Binding} - PullRequest
1 голос
/ 01 сентября 2010

Я создаю тестовое приложение для Windows Phone 7 Silverlight.(Я следовал этому учебнику .) У меня проблема с привязкой элементов списка к свойствам элемента.

Получение твитов для введенного имени пользователя:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        WebClient twitter = new WebClient();
        twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
        twitter.DownloadStringAsync(new Uri(String.Format("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name={0}", username.Text)));
    }

Добавьте эти твиты в список:

    struct TwitterItem
    {
        public string UserName { get; set; }
        public string Message { get; set; }
        public string ImageSource { get; set; }
    }

    void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            return;
        }

        XElement xmlTweets = XElement.Parse(e.Result);

        IEnumerable<TwitterItem> tweetItems = from tweet in xmlTweets.Descendants("status")
                               select new TwitterItem   
                               {
                                   ImageSource = tweet.Element("user").Element("profile_image_url").Value,
                                   Message = tweet.Element("text").Value,
                                   UserName = tweet.Element("user").Element("screen_name").Value
                               };

        listBox1.ItemsSource = tweetItems;

        PageTitle.Text = tweetItems.First().UserName;
    }

PageTitle.Text показывает, что твиты правильно анализируются ... но не отображаются правильно.

Вотlistbox, который я пытаюсь использовать:

        <ListBox Height="454" Width="418" HorizontalAlignment="Left" Margin="36,128,0,0" Name="listBox1" VerticalAlignment="Top">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Height="132">
                        <Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0" />
                        <StackPanel Width="370">
                            <TextBlock Text="{Binding UserName}" Foreground="BlanchedAlmond" FontSize="28"/>
                            <TextBlock Text="{Binding Message}" TextWrapping="Wrap" FontSize="24"/>
                            <TextBlock Text="shows up just fine" TextWrapping="Wrap" FontSize="24"/>
                        </StackPanel>

                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Третий TextBlock отображается просто отлично, поэтому проблема не в том, чтобы иметь 0 высоту или ширину.Я подозреваю, что проблема что-то с Text={Binding Property}.Или я что-то не так делаю?

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Я определял TwitterItem как внутренний класс MainPage, когда он должен был быть классом верхнего уровня.

0 голосов
/ 01 сентября 2010

Вам нужно передать ObservableCollection в listBox1.ItemsSource.Затем пользовательский интерфейс обновится, когда вы установите его.

ObservableCollection<TwitterItem> o = new ObservableCollection<TwitterItem>();
foreach(TwitterItem t in tweetItems)
{
   o.Add(t);
}
listBox1.ItemsSource = o;

Я полагаю, что у меня была та же проблема в моем приложении, и это исправило ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...