2014-02-21 26 views
1

有了这个Previous Question 我也能够设法显示输出。 我已经在这里读计算器上的帖子很多,但无法找到下一个合适的解决方案:如何操作输出到一个ItemsSource?

如何操纵输出过的ItemsSource,因为:

{"order_id":"12345678","itemList":["235724","203224","222224","222324","230021"],"amount":["65","50","10","25","42"]} 

数235724也内使用一个IMG的网址,需要变得像“235724 X 65”的可选列表框。

的解决办法是:

ObservableCollection<CreateItem> pitems = new ObservableCollection<CreateItem>(); 

     for (int i = 0; i < rootObject.itemList.Count; i++) 
     { 
      var itemsku = rootObject.itemList[i]; 
      var amount = rootObject.amount[i]; 
      pitems.Add(new CreateItem() { pTitle = itemsku + " X " + amount , pImage = new BitmapImage(new Uri(string.Format("http://image.mgam79.nl/indb/{0}.jpg", itemsku)))}); 
     } 

     MyListBox.ItemsSource = pitems; 

    public class CreateItem 
    { 
     public string pTitle { get; set; } 
     public ImageSource pImage { get; set; } 
    } 

回答

1

在RootObject.cs创建一个新的属性:

public List<string> ImageUrls { get; set;} 

在CS:

 var result = "{'order_id':'12345678','itemList':['235724','203224','222224','222324','230021'],'amount':['65','50','10','25','42']}"; 
     var rootObject = JsonConvert.DeserializeObject<RootObject>(result); 

     var imageUrls = new List<string>(); 

     foreach (var item in rootObject.itemList) 
     { 
      foreach (var amount in rootObject.amount) 
      { 
       imageUrls.Add(item + " X " + amount); 
      } 
      break; 
     } 

     rootObject.ImageUrls = imageUrls; 

     var items = new List<RootObject> 
     { 
      rootObject 
     }; 

     MyListBox.ItemsSource = items; 
    } 

xaml:

<ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Vertical"> 
          <TextBlock> 
           <TextBlock.Inlines> 
            <Run Text="order_id:" /> 
            <Run Text="{Binding order_id}" /> 
           </TextBlock.Inlines> 
          </TextBlock> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="ItemList: " /> 
           <ItemsControl ItemsSource="{Binding itemList}" /> 
          </StackPanel> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Amount: " /> 
           <ItemsControl ItemsSource="{Binding amount}" /> 
          </StackPanel> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="ImageUrls: " /> 
           <ItemsControl ItemsSource="{Binding ImageUrls}" /> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
+0

嗨,你能解释为什么图像不显示,如果我做“”而不是上面的例子吗? – mmeulstee

+0

@mmeulstee您需要指定ImageUrl的索引。尝试'“{Binding ImageUrls [0]}”' – ROMAN

+0

Nice nver想到了这一点,所以我需要在xaml中创建一个像大约30行那样的列表,因为列表可以从1到多个变量。 – mmeulstee