2009-03-26 25 views
27

Bir TabControl ve bir TextBlock içeren bir WPF kullanıcı arabirimi oluşturmaya çalışıyorum.WPF TabControl Databinding

Ben şu sınıfın örnekleri altta yatan bir koleksiyona bu iki denetimleri bağlamak istiyorum:

class PageModel 
{ 
    public string Title {get;set;} 
    public string TabCaption {get;set;} 
    public FrameworkElement TabContent {get;set} 
} 

sekme kontrolü her PageModel için bir sekme göstermesi gerekir.

  • Her sekmesinin başlık TabCaption özelliğini
  • Her sekmenin içeriği TabContent özelliği olmalıdır göstermesi gerekir.

TextBlock anda seçili sekme başlığı göstermesi gerekir.

Nasıl bu sonucu elde edebilirsiniz?

cevap

61
<TabControl x:Name="_tabControl" ItemsSource="{Binding PageModels}"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem"> 
      <Setter Property="Header" Value="{Binding TabCaption}"/> 
      <Setter Property="Content" Value="{Binding TabContent}"/> 
     </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 
<TextBlock Text="{Binding SelectedItem.Title, ElementName=_tabControl}"/> 
+1

Harika bir çözüm. Bir daha kullanışlı şey, Başlık Değerini {Binding Title} ve İçerik Değeri'ni {Binding.} Olarak ayarlamaktır. Bu, her başlık için Başlık özelliğini içeren tek bir görünüm modelini kullanmanıza olanak tanır. – Wouter

7

Ben de ItemTemplate ve ContentTemplate kullanarak bu here için başka bir çözüm buldular. Benim gibi herhangi bir WPF yeni başlayanlar için de

, bazı baş ağrısı ve hayal kırıklığı sonra sayfa modellerinin toplama tırnaklarıyla yansıtılmaz yerine List<PageModel> veya listeye herhangi değişikliklerin ObservableCollection<PageModel> olması gerektiğini fark (yani sizi Bir liste ise bir sekmeyi ekleyemez veya kaldıramaz).