WPF嵌套数据绑定

时间:2012-12-16 13:58:49

标签: wpf binding stackpanel

我正在尝试使用以下代码将数据绑定到WPF中的嵌套StackPanels - 无济于事。任何人都可以找到我出错的地方吗?

    <Page.Resources>
    <DataTemplate x:Key="MinuteTimeSlotTemplate">
        <TextBlock Text="{Binding Path=TourName}" Background="Blue" />
    </DataTemplate>
    <DataTemplate x:Key="HourlyTimeSlotTemplate">
        <StackPanel>
            <Border Height="120" BorderThickness="0,0,0,1" BorderBrush="#DDD" x:Name="parentRow">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="123"/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <StackPanel Orientation="Vertical" VerticalAlignment="Center" Margin="0,0,10,0" MouseUp="StackPanel_MouseUp_1">
                        <TextBlock Foreground="#4585B9" FontWeight="Bold" FontFamily="Trebuchet MS" FontSize="20" HorizontalAlignment="Right">
                            <Run Text="{Binding Path=Time}"/></TextBlock>
                        <TextBlock FontFamily="Trebuchet MS" Foreground="#808080" HorizontalAlignment="Right"><Run Text="View Bookings"/></TextBlock>
                    </StackPanel>
                    <StackPanel Orientation="Vertical" Grid.Column="1" Margin="10,0,10,0" x:Name="stk">
                        <ItemsControl ItemTemplate="{StaticResource MinuteTimeSlotTemplate}" ItemsSource="{Binding Path=HourlySlots}" >
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VirtualizingStackPanel Orientation="Vertical"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                        </ItemsControl>
                    </StackPanel>
                </Grid>
            </Border>
        </StackPanel>
    </DataTemplate>
</Page.Resources>
<helpers:AnimatedScrollViewer  x:Name="scrlHours" Grid.Column="1" PanningMode="Both" PanningDeceleration="5" PanningRatio="2">
    <ItemsControl x:Name="TimeSlotList" ItemTemplate="{StaticResource HourlyTimeSlotTemplate}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</helpers:AnimatedScrollViewer>

我在代码中设置了父StackPanels ItemsSource:

public HourlyCalendar() {
        InitializeComponent();
        TimeSlotList.ItemsSource = new Models.TimeSlots(DateTime.Today).HourlySlots;
    }

这是我的模特:

    public class TimeSlots {

    public TimeSlots(DateTime? day) {
        this.HourlySlots = DataManager.GetCalendarDayTimeSlots(day);
    }

    public IEnumerable<TimeSlot> HourlySlots { get; set; }

}

父StackPanel按预期绑定,但我无法弄清楚如何绑定子StackPanel ......

1 个答案:

答案 0 :(得分:1)

原来这很简单:

    <helpers:AnimatedScrollViewer x:Name="scrlHours" Grid.Column="1" PanningMode="Both" PanningDeceleration="5" PanningRatio="2">
    <ItemsControl x:Name="TimeSlots">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
               <Border Height="120" BorderThickness="0,0,0,1" BorderBrush="#DDD" x:Name="parentRow">
                    <StackPanel Orientation="Horizontal">
                        <StackPanel Orientation="Vertical" VerticalAlignment="Center" Margin="0,0,10,0" Width="123" MouseUp="StackPanel_MouseUp_1"> <!--Height="{Binding Height, ElementName=parentRow}"-->
                            <TextBlock Foreground="#4585B9" FontWeight="Bold" FontFamily="Trebuchet MS" FontSize="20" HorizontalAlignment="Right">
                            <Run Text="{Binding Path=Time}"/></TextBlock>
                            <TextBlock FontFamily="Trebuchet MS" Foreground="#808080" HorizontalAlignment="Right"><Run Text="View Bookings"/></TextBlock>
                        </StackPanel>
                        <ListView ItemsSource="{Binding Bookings}" ScrollViewer.CanContentScroll="False">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding TourName}"></TextBlock>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListView>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</helpers:AnimatedScrollViewer>