2012-12-23 29 views
8

किसी कारण से मुझे को को ObservableCollection पर देखने के मॉडल के ठीक से प्रदर्शित करने के लिए सही समय पर प्रदर्शित करने का समय है। मैं यहां पाया गया ट्यूटोरियल से मेरा डिज़ाइन बंद कर रहा हूं: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx। मुझे यहां मेरे जैसे कुछ प्रश्न मिल गए लेकिन किसी ने मेरी विशेष स्थिति को संबोधित नहीं किया। यह xaml में मेरा TabControl है।व्यूमोडल्स के संग्रह के लिए बाध्यकारी टैबकंट्रोल आइटमसोर्स

<TabControl ItemsSource="{Binding Workspaces}" 
      SelectedIndex="{Binding ActiveWorkspaceIndex}" 
      ItemTemplate="{StaticResource ClosableTabItemTemplate}"/> 

ClosableTabItemTemplate निम्नलिखित है।

<DataTemplate x:Key="ClosableTabItemTemplate"> 
     <DockPanel Width="120"> 
      <Button 
       Command="{Binding Path=CloseCommand}" 
       Content="X" 
       Cursor="Hand" 
       DockPanel.Dock="Right" 
       Focusable="False" 
       FontFamily="Courier" 
       FontSize="9" 
       FontWeight="Bold" 
       Margin="0,1,0,0" 
       Padding="0" 
       VerticalContentAlignment="Bottom" 
       Width="16" Height="16" 
       /> 
      <ContentPresenter 
       Content="{Binding Path=DisplayName}" 
       VerticalAlignment="Center" 
       /> 
     </DockPanel> 
     </DataTemplate> 

Workspaces दृश्य मॉडल की ObservableCollection है। ActiveWorkspaceIndex केवल सक्रिय वर्कस्पेस इंडेक्स है जो मैं दृश्य मॉडल में ट्रैक रखता हूं। मैं अपने ऐप.एक्सएएमएल फ़ाइल में निम्न डेटा टेम्पलेट के माध्यम से एक दृश्य के उदाहरण के साथ अपने व्यू मॉडल को जोड़ता हूं।

<DataTemplate DataType="{x:Type vm:ViewModelStartPage}"> 
    <v:ViewStartPage/> 
</DataTemplate> 

मैं केवल कार्यक्षेत्रों के संग्रह में एक दृश्य मॉडल जोड़ता हूं। मैं टैब नियंत्रण में 2 दृश्य प्रदर्शित करता हूं और उन्हें टैब्ड नहीं किया जाता है। यह लगभग टैबकंट्रोल को अलग-अलग विचारों के साथ TabItems के रूप में नहीं जानता है, यह एक स्टैक पैनल की तरह व्यवहार करता है, जो विचारों को ढंकता है। यदि मैं कोड में टैब आइटम बना देता हूं तो यह ठीक काम करता है:

System.Windows.Controls.TabItem i = new System.Windows.Controls.TabItem(); 
i.Content = new Views.ViewStartPage(); 
i.Header = "A Tab Item"; 
this.xTabControl.Items.Add(i); 

मुझे कुछ सामग्री टेम्पलेट या कुछ याद आना चाहिए। मैं बाद में अपने टैब स्टाइल करूँगा लेकिन अभी के लिए मैं बस बुनियादी टैब काम कर खुश हूं। टैब टैब में विचार प्रत्येक टैब के लिए भिन्न हो सकते हैं, इसलिए मैं सरल टेक्स्टब्लॉक टैबकंट्रोल टेम्पलेट उदाहरणों का उपयोग नहीं कर सकता, जो मैं पूरे स्थान पर देखता हूं ... आईई। यह नहीं ...

<TabControl.ContentTemplate> 
    <DataTemplate> 
     <TextBlock 
      Text="{Binding Content}" /> 
    </DataTemplate> 

कोई विचार?

+0

मैंने परीक्षण कोड में अपना कोड आजमाया, और टैबकंट्रोल यहां अपेक्षित काम करता है। क्या आप "स्टैकिंग" टैबकंट्रोल की एक छवि पोस्ट कर सकते हैं? – Sphinxxx

+0

इसे आज़माने के लिए धन्यवाद। मैं एक TabControl डेटा टेम्पलेट के साथ एक ContentControl का उपयोग कर समाप्त हो गया। यह चीजों को ठीक करने लग रहा था। ईमानदारी से मुझे यह समझाने के लिए पर्याप्त अनुभव नहीं हुआ कि यह बदली गई चीजें क्यों बदल रही है लेकिन अब यह काम कर रही है। मैं अपना कामकाजी कोड पोस्ट करूंगा। – akagixxer

उत्तर

6

मैं ContentControl का उपयोग TabControl डेटा टेम्पलेट (मूल ट्यूटोरियल प्रोजेक्ट की तरह) के साथ समाप्त कर दिया। यहां xaml कोड है जिसके साथ मैं समाप्त हुआ। इस काम को करने के लिए मैंने मूल नमूना परियोजना से कोड-पीछे नहीं बदला। ContentControl मेरे मेनविंडो.एक्सएएमएल में है और कोड के दो अन्य टुकड़े ResourceDictionary में थे।

<!-- Workspaces Tab Control --> 
     <ContentControl Grid.Row="1" 
         VerticalAlignment="Stretch" 
         HorizontalAlignment="Stretch" 
         Content="{Binding Path=Workspaces}" 
         ContentTemplate="{StaticResource WorkspacesTemplate}"/> 

<!-- Workspaces Template --> 
    <DataTemplate x:Key="WorkspacesTemplate"> 
    <TabControl Style="{StaticResource ClosableTabControl}" 
       IsSynchronizedWithCurrentItem="True" 
       ItemsSource="{Binding}" 
       ItemTemplate="{StaticResource WorkspaceTabItemTemplate}" 
       Margin="1"/> 
    </DataTemplate> 


<!-- Workspace Tab Item Template --> 
    <DataTemplate x:Key="WorkspaceTabItemTemplate"> 
    <Grid Width="Auto" Height="Auto"> 
     <ContentPresenter ContentSource="Header" Margin="3" 
         Content="{Binding Path=DisplayName}" 
         HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <ContentPresenter.Resources> 
      <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="{StaticResource Foreground}"/> 
      </Style> 
     </ContentPresenter.Resources> 
     </ContentPresenter> 
    </Grid> 
    </DataTemplate>