ListBox没有填充Silverlight 2中的数据绑定

时间:2009-05-04 05:52:33

标签: silverlight web-services data-binding

所以我正在尝试学习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>

由Web服务调用填充

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正在调用本地Web服务,该服务代理对实际FriendFeed Web服务的请求。

服务调用工作正常,返回项目,如果我调试调用lstItems.DataContext属性填充了包含数据的项目列表,但列表不显示任何内容,它始终为空白。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)


你需要绑定你的Listbox,就像这样

<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;

HTH

答案 1 :(得分:1)

您没有绑定到DataContext。

尝试添加ItemsSource="{Binding}"

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

然后确保对象的class和Title属性不是私有的。 如果有任何Binding错误消息,请检查输出(visual studio中的int输出窗口)并告诉我们。

答案 2 :(得分:1)

而不是DataContext你应该设置ItemsSource。如果您使用DataContext,则必须使用绑定设置ItemsSource,但是,对于您尝试执行的操作,此间接级别是不必要的。

有关在MSDN article中列出数据的详细信息,请参阅此ListBox