2

ほとんどのチュートリアルで、Windows Phone 7 用の Silverlight アプリケーションでのデータ バインディングについて、著者が使用し、監視可能なコレクションを使用しています。バインドした後にデータが変更されないことがわかりましたが、これは完全に必要ですか? リストだけを使用できないのはなぜですか?

各アプローチの長所と短所は何ですか? :)

また、次のコードが機能しないのはなぜですか? それは私にはそうであるように見えます。

C# コントリビューター クラス

    public class Contributor
    {
          public string Name;
          public string RSSUrl;

          public Contributor(string name, string rssURL)
          {
                  Name = name;
                  RSSUrl = rssURL;
          }
    }

C# アイテム バインディング

            List<Contributor> people = new List<Contributor> { new Contributor("Danny", "www.dannybrown.com") };
        contributorsListBox.ItemsSource = people;

XAML

<!--Panorama item two-->
        <!--Use 'Orientation="Horizontal"' to enable a panel that lays out horizontally-->
        <controls:PanoramaItem Header="contributors">
            <!--Double line list with image placeholder and text wrapping-->
            <ListBox x:Name="contributorsListBox" Margin="0,0,-12,0" ItemsSource="{Binding}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
                            <!--Replace rectangle with image-->
                            <Rectangle Height="100" Width="100" Fill="#FFE5001b" Margin="12,0,9,0"/>
                            <StackPanel Width="311">
                                <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
                                <TextBlock Text="{Binding RSSUrl}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </controls:PanoramaItem>

ご覧のとおり、各アイテムには赤い四角形が関連付けられています。リスト内の貢献者の数を変更するたびに、正しい量の赤い四角形が表示されるため、バインドが機能していると確信しています。

誰にもアイデアはありますか?

ありがとう、ダニー。

4

1 に答える 1

3

Contributor クラスには、パブリック フィールドだけでなく、プロパティが必要です。

public class Contributor
{
      public string Name { get; set; }
      public string RSSUrl { get; set; }

      public Contributor(string name, string rssURL)
      {
              Name = name;
              RSSUrl = rssURL;
      }
}

編集:あなたの質問に関して、ObservableCollections は、データが変更される場合 (つまり、レコードを追加または削除する場合) にのみ必要です。実際、Lists または IEnumerables にバインドできます。

于 2012-05-23T22:02:26.033 に答える