2012-04-16 2 views
0

Я пытаюсь отобразить три разных значения в списке с помощью хаб-плитки и двух текстовых блоков. сейчас появляются только два из трех элементов. Выпуск url и выпуск name, а третий пункт artistName не отображается. Я использую веб-клиент для загрузки данных JSON. Вот моя текущая настройка.Проблема, связанная с ListBox WP7

Сначала мой Классы

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: // апи. beatport.com/catalog/3/beatport/home, в JSON formatter. Благодарю.

UPDATE

Второй ListBox связан с Художника

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

ответ

-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> 
1

Не выход, показывающий ошибки? Я не думаю, что свойство artist.artistName существует, так как это список?

0

Артисты - это список. Вы должны привязать его к элементу управления списком (например, ListBox или ItemsPanel).

Другая возможность: показать только первый художник в использовании списка следующий синтаксис:

<TextBlock Text="{Binding artists[0].artistName}" Width="173" /> 
+0

извините, но что вы подразумеваете, связывая его с контролем списка? – nos9

+0

см. Мое редактирование .... – thumbmunkeys

+0

Могу ли я использовать мой существующий lisbox или мне нужно создать новый? Извините за все вопросы, я все еще новичок в этом. – nos9

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

+0

Все еще не работает.Вы думаете, что что-то не так с моими классами? – nos9

+0

@ nos9 - Нет подсказки. Вы видите какие-либо ошибки привязки в окне вывода? Очистите и загрузите исходное дерево где-нибудь. Я посмотрю на это. –

+0

Вот источник json. [link] (http://codepad.org/AzGiAE6R) – nos9

0

Попробуйте использовать ObservableCollection, поэтому вместо общественных List<ReleaseArtist> artists { get; set; } должен быть public ObservableCollection<ReleaseArtist> artists { get; set; }, потому что для меня это, кажется, после того, как вы получите художник из интернет, пользовательский интерфейс не обновляется с этими художниками.

Проверить этот учебник: http://msdn.microsoft.com/en-us/library/ms748365.aspx

Смежные вопросы