2009-08-11 14 views
25

एक अवलोकन करने योग्य चयन में TabControl की वस्तुओं को बाध्य करने का सबसे सरल उदाहरण क्या है?wpf में एक अवलोकन संग्रह में TabControl की वस्तुओं को कैसे बाध्य करें?

प्रत्येक टैब की सामग्री में अद्वितीय डेटा होगा, और वास्तव में इस डेटा को देखने योग्य होगा आइटम आइटम घटकों के लिए अपनी बाध्यता का चयन।

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

उस पर, मुझे WPF में एमवीवीएम का उल्लंघन किए बिना यह सब करने की ज़रूरत है! कोई मदद?

बहुत सराहना की!

उत्तर

35

बुनियादी उदाहरण:

<Window.Resources> 

    <DataTemplate x:Key="templateForTheContent" DataType="{x:Type vm:TheViewModelType}"> 
     <v:YourUserControl/> 
    </DataTemplate> 

    <DataTemplate x:Key="templateForTheHeader" DataType="{x:Type vm:TheViewModelType}"> 
     <TextBlock Text="{Binding ThePropertyToDisplayInTheHeader}"/> 
    </DataTemplate> 

</Window.Resources> 

... 

<TabControl ItemsSource="{Binding YourCollection}" 
      ContentTemplate="{StaticResource templateForTheContent}" 
      ItemTemplate="{StaticResource templateForTheHeader}"> 
</TabControl> 
+10

तुम्हें पता है, WPF + MVVM इस तरह के एक खड़ी सीखने की अवस्था है, लेकिन एक बार आप इसे भांप लेना समाधान वास्तव में बहुत ही सुंदर और स्वच्छ है। आपकी मदद के लिए धन्यवाद :) – bluebit

+0

मैं मानता हूं कि डब्ल्यूपीएफ के पास एक सीधी सीखने की वक्र है, लेकिन मैं यह नहीं कहूंगा कि एमवीवीएम पैटर्न के बारे में ... वास्तव में जब आप इसका उपयोग शुरू करते हैं तो यह काफी स्वाभाविक लगता है :) –

+1

जब तक डेटा टेम्पलेट्स केवल पढ़ने-योग्य नियंत्रण होते हैं, यह दृष्टिकोण काम करता है। अन्यथा, आपको सावधान रहना चाहिए: जब भी आप टैब पेज बदलते हैं तो TabControl दृश्य को पुन: प्रयास करता है, यानी जब आप एक टैब से दूसरे में स्विच करते हैं तो फिर दृश्य स्थिति खो रहे हैं और फिर फिर से स्विच करें। –

संबंधित मुद्दे