2012-12-02 13 views
1

我想用ListBox的Bindings來顯示一個JSON文件中提供的菜單。問題是,如果我使用下面的代碼,如果我將列表框直接放置在CantineTemplate中,並使用{Binding Meal.Lunch}和{Binding Meal.Dinner},他們會工作,下面的「MenuEntryTemplate」內容不會顯示,所以我想知道爲什麼添加這個額外的級別會破壞代碼。C#/ WP7綁定到包含來自JsonNet的JSON數組的對象?

我有以下片JSON(爲我不能改變格式):

"cantines": [ 
    { 
     "name": "Canteen A", 
     "meal": { 
      "lunch": [ 
       { 
        "type": "soup", 
        "name": "Vegetable soup" 
       }, 
       { 
        "type": "main", 
        "name": "Burger with fries" 
       }, 
      ], 
      "dinner": [ 
       { 
        "type": "main", 
        "name": "Chicken breast with rice" 
       } 
      ] 
     } 
    } 
] 

我反序列化這一點使用Json.Net,這似乎正確反序列化我的對象到下面的數據結構:

public class MenuModel : ViewModelBase 
{ 
    public List<Cantines> Cantines { get; set; } 
} 

public class Cantines 
{ 
    public string Name { get; set; } 
    public Meals Meal { get; set; } 
} 

public class Meals 
{ 
    public List<Lunches> Lunch { get; set; } 
    public List<Dinners> Dinner { get; set; } 
} 

public class Lunches 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
} 

public class Dinners 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
} 

我的XAML如下所示:

<DataTemplate x:Key="MealEntryTemplate"> 
    <StackPanel Orientation="Vertical"> 
     <TextBlock Text="{Binding Type}" /> 
     <TextBlock Text="{Binding Name}" /> 
    </StackPanel> 
</DataTemplate> 

<DataTemplate x:Key="MealTemplate"> 
    <StackPanel> 
     <!-- These 2 listboxes do not show up, when I leave this MealTemplate out and 
      use {Binding Meal.Lunch} in the "CantineTemplate" it does work. --> 
     <ListBox 
      ItemsSource="{Binding Lunch}" 
      ItemTemplate="{StaticResource MealEntryTemplate}" 
      /> 
     <ListBox 
      ItemsSource="{Binding Dinner}" 
      ItemTemplate="{StaticResource MealEntryTemplate}" 
      /> 
    </StackPanel> 
</DataTemplate> 

<DataTemplate x:Key="CantineTemplate"> 
    <ListBox 
     ItemsSource="{Binding Meal}" 
     ItemTemplate="{StaticResource MealTemplate}" 
     /> 
</DataTemplate> 

<DataTemplate x:Key="MenuTemplate"> 
    <ListBox 
     ItemsSource="{Binding Cantines}" 
     ItemTemplate="{StaticResource CantineTemplate}" 
    /> 
</DataTemplate> 

回答

0
<ListBox 
    ItemsSource="{Binding Meal}" 
    ItemTemplate="{StaticResource MealTemplate}" 
    /> 

屬性Meal是單個Meals對象。列表框需要一個對象集合,這就是爲什麼它不起作用。您可以聲明Meal屬性爲List<Meals>以使其正常工作,但如果只有一個元素,則看不到使用列表框的要點。

相關問題