Xaml:在DataTemplate中绑定集合

Joh*_*ann 1 c# xaml binding datatemplate

我是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; }
}
Run Code Online (Sandbox Code Playgroud)

我想将这些数据绑定到GridView(本身不需要是网格视图),如下所示: 在此输入图像描述

我正在将数据加载到我的页面(在HotelPageViewModel中我有一个ObservableCollection'Hotel's - > HotelResults):

  var viewModel = new HotelPageViewModel();
  this.DataContext = viewModel;
Run Code Online (Sandbox Code Playgroud)

所以我到目前为止尝试的是在我的CustomStyles.xaml中添加一个Datatemplate.我可以发布这段代码,但那是我需要帮助的地方.我不知道如何处理Room-Collection.我能够在输出中显示基本的酒店数据(我的草图的红色部分),但我如何在我的DataTemplate(蓝色部分)中管理多个房间?

HotelPage.xaml的代码:

<GridView x:Name="HotelResults" HorizontalAlignment="Left" VerticalAlignment="Top"
          ItemsSource="{Binding HotelResults}"
          ItemTemplate="{StaticResource HotelPageTemplate}"         
</GridView>
Run Code Online (Sandbox Code Playgroud)

dev*_*tal 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>
Run Code Online (Sandbox Code Playgroud)