0

私は自分の 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 プロパティ セットを取得していません。

私は何が欠けていますか?

ありがとう

4

1 に答える 1

1

mark_itemクラスをpublicではなくとして宣言する必要がありますprivate

publicSilverlight のデータ バインディングは、クラスとプロパティにのみアクセスできます。class を宣言すること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); ターゲット要素は 'System.Windows.Controls.TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'System.String') です。 System.MethodAccessException: メソッド 'System.Windows.CLRPropertyListener.get_Value()' によるメソッド 'PrivateClassProblem.MainPage+mark_item.get_timestamp()' へのアクセスに失敗しました。

class を宣言するpublicと、問題はなくなりました。

于 2012-04-11T21:36:31.913 に答える