2012-12-16 8 views
0

다음 코드를 사용하여 WPF에서 중첩 된 StackPanels에 데이터를 바인딩하려고합니다. 아무도 내가 잘못 가고있는 곳을 찾을 수 있습니까?WPF 중첩 데이터 바인딩

<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 ...

+0

하위 요소 의 텍스트가 아닌 을 사용하지 않았지만 Text 특성을 사용했습니다. – kenny

+0

건배 케니. 나는이 문제를 해결할 수 있었고, "2 일 안에"답을 표시 할 것입니다! – Leigh

답변

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>