所以我正在尝试学习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
属性填充了包含数据的项目列表,但列表不显示任何内容,它始终为空白。我错过了什么吗?
答案 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。