1

Bindings with ListBoxesを使用して、JSONファイルで提供されるメニューを表示しようとしています。問題は、以下のコードを使用した場合、以下の「MenuEntryTemplate」のコンテンツが表示されないことです。リストボックスをCantineTemplateに直接配置し、{BindingMeal.Lunch}と{BindingMeal.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>
4

1 に答える 1

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

プロパティMealは単一のMealsオブジェクトです。リストボックスはオブジェクトのコレクションを期待しているため、機能していません。Mealプロパティを として宣言してList<Meals>機能させることもできますが、要素が 1 つしかない場合はリストボックスを使用する意味がわかりません。

于 2012-12-02T11:43:51.357 に答える