我对xaml和数据绑定很新,所以请不要吃我。我担心Windows 8商店项目atm并且确实有一些嵌套数据绑定的理解问题。我会尽可能清楚地构建我的帖子,如果需要的话,我非常愿意给予进一步的支持。
我们假设我有一个这样的类结构:
public class Hotels
{
public Collection<Hotel> HotelCollection { get; set; }
}
public class Hotel
{
public string Name { get; set; }
public string Town { get; set; }
public string ImageUrl { get; set; }
public Collection<Room> RoomCollection { get; set; }
}
public class Room
{
public string Name { get; set; }
public string OccupancyMax { get; set; }
public string OccupancyMin { get; set; }
}
我想将这些数据绑定到GridView(本身不需要是网格视图),如下所示:
我正在将数据加载到我的页面(在HotelPageViewModel中我有一个ObservableCollection'Hotel's - &gt; HotelResults):
var viewModel = new HotelPageViewModel();
this.DataContext = viewModel;
所以我到目前为止尝试的是在我的CustomStyles.xaml中添加一个Datatemplate。我可以发布这段代码,但那是我需要帮助的地方。 我不知道如何处理Room-Collection。我能够在输出中显示基本的酒店数据(草图的红色部分),但我如何在DataTemplate中管理多个房间(蓝色部分)?
HotelPage.xaml的代码:
<GridView x:Name="HotelResults" HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding HotelResults}"
ItemTemplate="{StaticResource HotelPageTemplate}"
</GridView>
答案 0 :(得分:7)
您可以使用集合控件,例如ItemsControl
将ItemTemplate
设置为另一个DataTemplate
的实例。
<DataTemplate x:Key="{HotelPageTemplate}">
<StackPanel>
<TextBlock Text="{Binding Name"} />
...
<ItemsControl ItemsSource="{Binding RoomCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding OccupancyMax}" />
...
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DateTemplate>