Xaml:在DataTemplate中绑定集合

时间:2013-03-13 08:42:29

标签: 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; }
}

我想将这些数据绑定到GridView(本身不需要是网格视图),如下所示: enter image description here

我正在将数据加载到我的页面(在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>

1 个答案:

答案 0 :(得分:7)

您可以使用集合控件,例如ItemsControlItemTemplate设置为另一个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>