2011-11-03 2 views
0

동적으로 항목을 tabcontrol에 추가하려고하는 WPF 응용 프로그램이 있습니다. tabcontrol의 항목에 데이터 바인딩되어야 메뉴 항목 목록이 있습니다. 유일한 문제는 TabControl.Items가 항목이 추가되었다는 것을 다른 사람에게 알리지 않는다는 것입니다. 필자는 TabControl.Items.Count 대신 바인딩하여이 테스트를 거쳤으며 변환기에 대한 호출을 얻었습니다.하지만 전달 된 값은 유용하고 유용한 것이 아닙니다. 이 MenuItem의 XAML이있는 TabControl에 대한 ControlTemplate이 내부Tabcontrol.Items에 바인딩하는 방법

<MenuItem ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=Items, Converter={StaticResource TabControlItemConverter}}"> 

을 : 여기에 제대로 바인딩하지 않는 항목이 업데이트를 호출하지 않기 때문에와 관계있는 코드입니다. 정적 항목, 즉 이미 TabControl에 정의 된 항목의 경우이 코드는 완벽하게 작동합니다. 하지만 런타임에 추가 된 항목을 가져오고이 바인딩을 업데이트 할 수없는 TabControl 있습니다. 누군가가 Items 컬렉션에 바인딩 할 수있는 TabControl에 연결된 속성의 일종을 추가 했습니까?

배경 정보 수정 항목이 추가 된 TabControl은 영역입니다 (프리즘 응용 프로그램입니다). 여기와 관계있는 여기 XAML

<TabControl cal:RegionManager.RegionName="{x:Static local:LocalRegionNames.SelectedItemRegion}" > 
      <TabControl.Resources> 
       <Style TargetType="TabItem" BasedOn="{StaticResource TabItemStyle}"> 
        <Setter Property="HeaderTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <Image Style="{StaticResource tabItemImage}" Height="20" /> 
            <TextBlock Text="{Binding Content.DataContext.TabHeader, RelativeSource={RelativeSource AncestorType=TabItem}}" VerticalAlignment="Center" /> 
           </StackPanel> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </TabControl.Resources> 
     </TabControl> 

지역에 뷰를 추가하는와 관계있는 코드입니다 :

ProjectDetailView view = new ProjectDetailView(); 
ProjectDetailViewModel viewModel = new ProjectDetailViewModel(); 
viewModel.CurrentProject = project; 
view.DataContext = viewModel; 



IRegionManager retManager = RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Add(view, null, true); 
    RegionManager.Regions[LocalRegionNames.SelectedItemRegion].Activate(view); 

이 모든 일 잘 ... 뷰가 추가됩니다, 탭 컨트롤 항목을 추가하고, 조회수가 표시됩니다. 그러나 tabcontrol Items 속성을 해당 컬렉션에 변경 내용을 브로드 캐스트합니다.

답변

1

TabControls에 대해 똑같은 작업을 수행하고 ItemsSource을 바인드해야합니다. 항목을 추가하는 경우 업데이트하려는 경우 원본 컬렉션에 INotifyCollectionChanged을 구현해야한다는 점만 고려해야합니다. ObservableCollection<T>은 이미 인터페이스를 구현하며 이러한 바인딩의 소스로 사용되는 경우가 많습니다.

관련 문제