結構
該場景是我有一個樞軸,其中每個項目是某一天的菜單。在該PivotItem中,我需要在菜單上顯示菜餚,按類別分組(例如湯,甜點等)。MVVM +多級/嵌套數據綁定
我已經用MVVM模型實現了這一點。
因此,我有如下因素模型:
public class Menu{
public string Date;
public List<DishList> Categories;
}
public class DishList
{
public string Category;
public List<Dish> Dishes;
}
public class Dish
{
public string Name;
public string Price;
}
編輯:這些都在這裏簡化,每個字段的實際結構是這樣的:
private string _date;
//Get_Set
public string Date
{
get
{
return _date;
}
set
{
if (value != _date)
{
_date = value;
}
}
}
所以結構會是這樣:一個PivotElement包含一個Menu對象。在裏面,我展示了Categories,一些DishLists。在Dishlist中,我展示了類別和不同的菜餚,每種菜餚都有它的名稱和價格。讓事情變得更清晰的模型(SkyDrive上的pdf文件); http://sdrv.ms/12IKlWd
我有以下視圖模型
public class MenuViewModel : INotifyPropertyChanged
{
private ObservableCollection<Menu> _Menus;
}
的應實施(結構)所需的佈局的觀點如下:
<phone:Pivot
ItemsSource="{Binding Menus}">
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Date}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ItemsControl
ItemsSource="{Binding Categories}">
<TextBlock
Text="{Binding Category}"/>
<ItemsControl
x:Name="Dishes"
ItemsSource="{Binding Dishes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="1"
Text="{Binding Name}"/>
<TextBlock
Grid.Column="2"
Text="{Binding Price}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ItemsControl>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
正如你所看到的,嵌套在數據綁定獲取它所需的數據。
唯一的代碼,然後我在頁面上做的是
DataContext = App.ViewModel;
的問題
當我啓動起來,我得到的PivotItems頭顯示正確的數據,並PivotItems的正確數量。可惜,就是這樣; PivotItem的內容保持空白。因此,第一級數據綁定工作,但沒有進一步的。
我在想
方式- 第一級:每個PivotItem被鏈接到類型菜單的對象,以頭Menu.Date
- 2級:這裏面我PivotItem設置的ItemsControl的的ItemsSource到Menu.Categories
- 3級:在現在的ItemsSource是Menu.Categories.Dishes
我已經搜查了不少撥弄與周圍的DataContext和ItemsSourc e和不同種類的「{綁定...}」,但我無法使其工作。我想在xaml中進行綁定,而不是在代碼隱藏中。
註釋- 唯一功能是顯示數據。數據是固定的,並從文件加載一次。 這就是爲什麼我選擇ItemsControl而不是ListBox,因此不需要選擇任何東西。
- 這是一個MVVM的方法我剛纔的問題:Databinding + Dynamic Pivot
並且沒有列出請求,'ObservableCollection'是MVVM中的首選集合類型。 –
user7116
1.這些值實際上具有屬性而不是字段,但是我沒有在這裏鍵入它們,希望保持簡單。道歉,我用一個真實代碼中的例子來編輯帖子。 –
2.我爲外部ItemsControl添加了ItemTemplate。但是,現在我在VS中發現錯誤,說「屬性VisualTree設置了多次」。是不是可以將ItemsControl放入ItemsControl中? –