0

ハブタイルと2つのテキストブロックを使用して、リストボックス内に3つの異なる値を表示しようとしています。現在、3つのアイテムのうち2つだけが表示されます。リリースurlとリリース name、および3番目のアイテムartistNameが表示されていません。Webクライアントを使用してJSONデータをダウンロードしています。これが私の現在の設定です。

最初の私のクラス

public class NewReleasesCharts 
{
    //public Metadata metadata { get; set; }
    public ResultHome results = new ResultHome();
    public IEnumerator<ResultHome> GetEnumerator()
    {
        return this.results.GetEnumerator();
    }
}

public class ResultHome
{
    public List<FeaturedReleases> featuredReleases { get; set; }

    //public List<FeaturedCharts> featuredCharts { get; set; }
    //public List<TopDownloads> topdownloads { get; set; }
    //public List<MostPopularReleases> mostPopularReleases { get; set; }
    //public List<Components> components { get; set; }

    internal IEnumerator<ResultHome> GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

public class FeaturedReleases
{
    public int id { get; set; }
    public string type { get; set; }
    public string name { get; set; }
    public string slug { get; set; }
    public List<ReleaseArtist> artists { get; set; }
    public ReleaseImage images { get; set; }
}

public class ReleaseArtist
{
    public int artistID { get; set; }
    public string artistName { get; set; }
}

public class ReleaseImage
{
    //public ReleaseSmall small { get; set; }
    public ReleaseMedium medium { get; set; }
    public ReleaseLarge large { get; set; }
}

public class ReleaseMedium
{
    public int width { get; set; }
    public int height { get; set; }
    public string url { get; set; }
    public string secureUrl { get; set; }
}

public class ReleaseLarge
{
    public int width { get; set; }
    public int height { get; set; }
    public string url { get; set; }
    public string secureUrl { get; set; }
}

xaml

                <ListBox Grid.Row="0" x:Name="listRelease" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <toolkit:HubTile Source="{Binding images.large.url}" Margin="10" />
                                <TextBlock Text="{Binding name}" Width="173" />
                                <TextBlock Text="{Binding artists.artistName}" Width="173" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

と背後にあるコード

public void jsonHome_GetDataCompleted(object snder, DownloadStringCompletedEventArgs e)
{
    NewReleasesCharts homeData = JsonConvert.DeserializeObject<NewReleasesCharts>(e.Result);

    const int limit = 6;

    this.listRelease.ItemsSource = homeData.results.featuredReleases.Take(limit);
}

JSON文字列は、api:http://api.beatport.com/catalog/3/beatport/homeをJSONフォーマッターに挿入することで表示できます。ありがとう。

アップデート

アーティストにバインドされた2番目のリストボックス

                <ListBox ItemsSource="{Binding Artists}">
                    <ItemsPanelTemplate>
                        <toolkit:WrapPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding artistName}" />
                        </DataTemplate>
                    </ListBox.ItemTemplate>    
                </ListBox>
4

5 に答える 5

1

出力にエラーが表示されていませんか? リストであるため、プロパティ artist.artistName は存在しないと思いますか?

于 2012-04-16T19:08:57.993 に答える
0

ObservableCollectionを使用してみてください。インターネットからアーティストを受け取った後、UIがそれらのアーティストで更新されていないように見えるため、公開する代わりに公開List<ReleaseArtist> artists { get; set; }する必要があります。public ObservableCollection<ReleaseArtist> artists { get; set; }

このチュートリアルを確認してください:http://msdn.microsoft.com/en-us/library/ms748365.aspx

于 2012-04-17T20:56:28.313 に答える
0

にバインドItemSourceするときに大文字の問題がありArtistsます。

<ListBox ItemsSource="{Binding Artists}">
    <ItemsPanelTemplate>
        <toolkit:WrapPanel Orientation="Horizontal" />
    </ItemsPanelTemplate>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding artistName}" />
        </DataTemplate>
    </ListBox.ItemTemplate>    
</ListBox>

ただし、FeaturedReleasesクラスは を定義し、 は定義artistsしませんArtists

public class FeaturedReleases
{
    public int id { get; set; }
    public string type { get; set; }
    public string name { get; set; }
    public string slug { get; set; }
    public List<ReleaseArtist> artists { get; set; }
    public ReleaseImage images { get; set; }
}

あなたの静止画に合わせて、バインディングを次のように変更する必要がありますartists

于 2012-04-17T01:33:15.427 に答える
0

アーティスト一覧です。これをリスト コントロール (ListBox または ItemsPanel など) にバインドする必要があります。

その他の可能性: リストの最初のアーティストのみを表示するには、次の構文を使用します。

  <TextBlock Text="{Binding artists[0].artistName}" Width="173" />
于 2012-04-16T19:13:20.130 に答える
-1

私はついにそれを理解することができました。ネストされたリストボックスにバインドartistsし、必要なレイアウトを取得できました。これがコードです。

                    <ListBox x:Name="listRelease" Grid.Row="0" >
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <toolkit:HubTile Source="{Binding images.large.url}" Margin="10" IsFrozen="True" />
                                <TextBlock Text="{Binding name}" Width="173" />
                                <ListBox ItemsSource="{Binding artists}" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel Orientation="Horizontal" >
                                                <TextBlock Text="{Binding name}" Margin="10,0,0,0"  Width="173" />
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
于 2012-04-21T22:50:43.817 に答える