С#/WP7 привязка к объекту, содержащему массивы JSON от JsonNet?

62
8

Я пытаюсь использовать Bindings with ListBoxes для отображения меню, которое поставляется в файле JSON. Проблема в том, что содержимое "MenuEntryTemplate" ниже не отображается, если я использую следующий код: если я помещаю списки в CantineTemplate напрямую и использую {Binding Meal.Lunch} и {Binding Meal.Dinner}, они работают, поэтому мне интересно, почему добавление этого дополнительного уровня нарушает код.

У меня есть следующий фрагмент 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>

спросил(а) 2021-01-19T16:49:05+03:00 2 месяца, 3 недели назад
1
Решение
76

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

Свойство Meal - это единственный объект Meals. Listbox ожидает набор объектов, поэтому он не работает. Вы можете объявить свойство Meal как List<Meals> чтобы он работал, но я не вижу смысла использовать список, если есть только один элемент.

ответил(а) 2021-01-19T16:49:05+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема