2013-08-14 5 views
0

가능 다른 목록 상자 안에 목록 상자를 만들 수 있습니까? 두리스트 박스 모두 동일한 데이터를 바인딩한다. 두번째리스트 박스는 뭔가 추가되었다. 두 번째 목록 상자 (내부)에서 데이터를 표시하지 않거나 바인딩이 작동하지 않는다는 것을 알지 못합니다. 첫 번째 목록 상자의 데이터는 바인딩 OK입니다. 내 샘플 :목록 상자 안에 바인딩 데이터가있는 목록 상자

<Grid Grid.Row="2"> 
     <ListBox x:Name="lbTransitNow" FontSize="13" ItemsSource="{Binding MyDataForTransit}"> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       </Style> 
      </ListBox.ItemContainerStyle> 
      <ListBox.ItemTemplate> 
       <DataTemplate > 
        <StackPanel> 
         <Grid x:Name="gridTodayBtn"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="*" /> 

          </Grid.ColumnDefinitions> 
          <TextBlock x:Name="tbTransitStart" Foreground="Black" Grid.Column="0" 
              Text="{Binding Lines_departure_time}" HorizontalAlignment="Left"/> 
          <TextBlock x:Name="tbTransitEnd" Foreground="Black" Text="{Binding Lines_arrival_time}" 
               Grid.Column="1"/> 
          <TextBlock x:Name="tbTransitTravelTime" Foreground="Black" Text="{Binding Lines_travelTime}" 
               Grid.Column="2"/> 
          <TextBlock x:Name="tbPrice" Foreground="Black" Text="{Binding Lines_price}" 
               Grid.Column="3"/> 
          <TextBlock x:Name="tbTransitKm" Foreground="Black" Text="{Binding Lines_km}" 
               Grid.Column="4"/> 
          <TextBlock x:Name="tbTransitNumber" Foreground="Black" Text="{Binding Lines_name}" 
               Grid.Column="5"/> 
          <Image x:Name="imgMoreInfo" Source="layoutGraphics/b5.png" Grid.Column="6" Width="40" Height="40" Tapped="imgMoreInfo_Tapped" Tag="{Binding}"></Image> 

          <ListBox x:Name="lbTransitNowSub" FontSize="13" ItemsSource="{Binding MyDataForTransit}"> 
           <ListBox.ItemContainerStyle> 
            <Style TargetType="ListBoxItem"> 
             <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
            </Style> 
           </ListBox.ItemContainerStyle> 
           <ListBox.ItemTemplate> 
            <DataTemplate > 
             <Grid x:Name="gridTodayBtn"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="*" /> 

              </Grid.ColumnDefinitions> 
              <TextBlock x:Name="tbTransitStart" Foreground="Black" Grid.Column="0" 
              Text="{Binding Lines_departure_time}" HorizontalAlignment="Left"/> 
              <TextBlock x:Name="tbTransitEnd" Foreground="Black" Text="{Binding Lines_arrival_time}" 
               Grid.Column="1"/> 
              <TextBlock x:Name="tbTransitTravelTime" Foreground="Black" Text="{Binding Lines_travelTime}" 
               Grid.Column="2"/> 
              <TextBlock x:Name="tbPrice" Foreground="Black" Text="{Binding Lines_price}" 
               Grid.Column="3"/> 
              <TextBlock x:Name="tbTransitKm" Foreground="Black" Text="{Binding Lines_km}" 
               Grid.Column="4"/> 
              <TextBlock x:Name="tbTransitNumber" Foreground="Black" Text="{Binding Lines_name}" 
               Grid.Column="5"/> 
              <Image x:Name="imgMoreInfo" Source="layoutGraphics/b5.png" Grid.Column="6" Width="40" Height="40" Tapped="imgMoreInfo_Tapped" Tag="{Binding}"></Image> 
             </Grid> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 
         </Grid> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

    </Grid> 

    public ObservableCollection<BindingData> _myDataForTransit = new ObservableCollection<BindingData>(); 
    public ObservableCollection<BindingData> MyDataForTransit 
    { 
     get { return _myDataForTransit; } 
     set { _myDataForTransit = value; } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(null, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

_myDataForTransit.Add(new BindingData 
      { 
       myData... 
      }); 
      } 
      OnPropertyChanged("MyDataForTransit"); 

답변

0

첫째, 당신의 접근 방식은 바로 당신이 그룹화 된 데이터를 구현하는 데 사용할 수있는 collectionViewsource를 사용할 수있는이 자리에 있지 않습니다. 그것의 DataContext가 MyDataForTransit 인 부모의 DataContext를 설정되고 있으며,이 컬렉션 컬렉션을 포함하지 않도록 두 번째 목록 상자가 첫 번째 목록 상자의 DataTemplate을에 있기 때문에 구속력의

원인이 을 MyDataForTransit하는 당신을 두 번째 listBox는 Binded이므로 두 번째 목록 상자가 표시되지 않습니다.

이 항목을 확인하려면 BindingData 클래스에서 컬렉션을 만들고 두 번째 ListBox ItemsSource를이 컬렉션에 바인딩하면 작업 중임을 알 수 있습니다. 실제로 wpf 거기에 귀하의 클래스/페이지/usercontrol 쉽게 설정할 수 있습니다 relativeSource라는 속성이 있지만 Windows 8에서 할 수 없습니다. 어떻게 든 도와 줄 수 있기를 바랍니다.