2011-11-03 51 views
0

我有一個WPF應用程序,我試圖動態地將項目添加到tabcontrol。我有一個應該將數據綁定到tabcontrol項目的菜單項列表。唯一的問題是TabControl.Items不會通知其他人項目已被添加。我測試了這個綁定,而不是TabControl.Items.Count和調用轉換器(但傳入的值是計數,而不是有用的)。下面是培訓相關代碼,沒有得到正確數據綁定,因爲項目不叫喚更新:如何綁定到Tabcontrol.Items

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

這個菜單項XAML是一個TabControl一個控件模板內。對於靜態項目,即已經在TabControl中定義的項目,此代碼完美工作。但我有一個TabControl,它可以在運行時添加項目,並且似乎無法更新此綁定。有沒有人向可以綁定到Items集合的TabControl添加某種附加屬性?

編輯背景信息 添加了項目的TabControl是一個區域(這是一個Prism應用程序)。這裏是培訓相關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>已經實現了該接口並且經常用作這種綁定的源。

相關問題