使用WrapPanel绑定ItemsControl?

时间:2012-04-11 20:04:13

标签: silverlight windows-phone-7

我已将我的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属性。

我错过了什么?

由于

1 个答案:

答案 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时,问题就消失了。