我已将我的ItemsControl设置为WrapPanel:
<ItemsControl Grid.Row="1" Height="200" Width="420" HorizontalAlignment="Center" Name="itemsMarks" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel HorizontalAlignment="Center" VerticalAlignment="Center"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Margin="1"
VerticalAlignment="Center"
Source="Images/markg.png"
Width="70"
Height="70" />
<TextBlock TextWrapping="Wrap" Foreground="Black" Text="{Binding timestamp}" FontSize="14" HorizontalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的数据是
private class mark_item
{
public mark_item()
{
this.timestamp= "";
}
public string timestamp { get; set; }
}
private List<mark_item> marks;
itemsMarks.ItemsSource = marks;
列表标记已正确创建,WrapPanel实际上包含列表中的项目数,但TextBlock未设置其Text属性。
我错过了什么?
由于
答案 0 :(得分:1)
您需要将mark_item
课程声明为public
,而不是private
。
Silverlight中的数据绑定只能访问public
类和属性。通过声明类private
,您将阻止Silverlight访问它。
我按原样使用了您的代码,并且我看到了您描述的相同行为。正确数量的项目出现在ItemsControl
中,但文本丢失了。我还在Visual Studio / Visual Web Developer Express的“输出”窗口中看到以下消息。 (我已经省略了堆栈跟踪,因为消息本身足够长):
System.Windows.Data错误:无法从'PrivateClassProblem.MainPage + mark_item'(类型'PrivateClassProblem.MainPage + mark_item')获取'timestamp'值(类型'System.String')。 BindingExpression:Path ='timestamp'DataItem ='PrivateClassProblem.MainPage + mark_item'(HashCode = 12905972); target元素是'System.Windows.Controls.TextBlock'(Name =''); target属性为'Text'(类型'System.String').. System.MethodAccessException:尝试通过方法'System.Windows.CLRPropertyListener.get_Value()'访问方法'PrivateClassProblem.MainPage + mark_item.get_timestamp()'失败。
当我宣布课程public
时,问题就消失了。