ListBox не заполняется при привязке данных в Silverlight 2 - PullRequest
1 голос
/ 04 мая 2009

Итак, я пытаюсь изучить Silverlight, поэтому я создал простое демонстрационное приложение, которое извлекает мой домашний канал из FriendFeed и отображает элементы в списке.

У меня определен список:

    <ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1">            
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="8,8,43,8">
                    <TextBlock Text="{Binding Title}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>            
    </ListBox>

, который заполняется вызовом веб-службы

private void LoginButton_Click(object sender, RoutedEventArgs e)
{
    FriendFeedServiceClient client = new FriendFeedServiceClient();
    client.GetHomeCompleted += new EventHandler<GetHomeCompletedEventArgs>(client_GetHomeCompleted);
    client.GetHomeAsync(FfUsername.Text, FfApiKey.Password);
}

void client_GetHomeCompleted(object sender, GetHomeCompletedEventArgs e)
{
    lstItems.DataContext = e.Result;
}

FriendFeedServiceClient выполняет вызов к локальному веб-сервису, который передает запрос фактическому веб-сервису FriendFeed.

Сервисный вызов работает нормально, элементы возвращаются, если я отлаживаю вызов, свойство lstItems.DataContext заполняется списком элементов с данными в них, но список ничего не отображает, он всегда пуст. Я что-то пропустил?

Ответы [ 3 ]

1 голос
/ 04 мая 2009

Вы не привязаны к DataContext.

Попробуйте добавить ItemsSource="{Binding}":

<ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1" ItemsSource="{Binding}">

Затем убедитесь, что свойства class и Title вашего объекта не являются частными. Также проверьте вывод (окно вывода int в visual studio), если есть какие-либо сообщения об ошибках Binding, и сообщите нам.

1 голос
/ 04 мая 2009

Вместо DataContext вы должны установить ItemsSource. Если вы используете DataContext, тогда вам нужно установить ItemsSource с привязкой, однако этот уровень косвенности не нужен для того, что вы пытаетесь сделать.

См. Эту статью MSDN для получения подробной информации о перечислении данных в ListBox .

1 голос
/ 04 мая 2009


Вам нужно связать свой список, что-то вроде этого

<ListBox x:Name="lstItems" Margin="5,61,5,5" Grid.Row="1" ItemsSource="{Binding}">

и тогда сработает привязка TextBlock к пути Title.

РЕДАКТИРОВАТЬ: вы устанавливаете DataContext, который дает подсказку, что вы, вероятно, привязываете пользовательский объект, пытались ли вы привести e.GetResult к вашему пользовательскому объекту что-то вроде

YourCustomObject obj = (YourCustomObject) e.GetResult;
lstItems.DataContext = obj;

НТН

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