2009-06-16 8 views
12

मेरे पास DataTemplate है जिसका मैं पुन: उपयोग करना चाहता हूं। जिस हिस्से को मैं कारक बनाना चाहता हूं वह बाध्यकारी है, क्योंकि यह एकमात्र चीज है जो बदलती है। मेरा DataTemplate लगभग इस तरह दिखता है। (वास्तव में काफ़ी यह करने के लिए अधिक है, लेकिन मैं बाहरी सामान बाहर ले जाया गया है।)मैं WPF में डेटा टेम्पलेट के बाध्यकारी को कैसे कारगर कर सकता हूं?

<DataTemplate> 
    <TextBox Text="{Binding Name}" /> 
</DataTemplate> 

मैं इस DataTemplate का पुन: उपयोग कर सकते हैं, जबकि बस संपत्ति बदलती करने के लिए जो मैं बाध्यकारी रहा हूँ? (ध्यान दें कि अगर यह केवल TextBox जितना आसान था, तो मैं इसके बारे में चिंता नहीं करता, लेकिन DataTemplate में वास्तव में StackPane एल शामिल है जिसमें इसके कई अन्य तत्व हैं। मैं इसे एक स्थान पर केंद्रीकृत करना चाहता हूं, इसलिए DataTemplate ।)

मैंने इस समस्या से निपटने के लगभग दो तरीकों के बारे में सोचा है।

  1. एक साधारण कस्टम नियंत्रण बनाएं। इसका पुन: उपयोग करें, और DataTemplate का पुन: उपयोग करने के बारे में चिंता न करें।
  2. डेटा टेम्पलेट के किसी प्रकार के उप-वर्ग के साथ प्रयोग। (मुझे बताया गया है कि यह संभव है।) मैं उस पर एक निर्भरता संपत्ति जोड़ूंगा जो मुझे उस संपत्ति का नाम निर्दिष्ट करने दे जिस पर मैं बांधना चाहता हूं।

सुझाव?

उत्तर

4

मुझे अपने प्रश्नों का उत्तर देने से नफरत है, लेकिन पूर्णता के लिए, मेरा समाधान यहां है।

<ListBox ItemsSource="{Binding}"> 
    <ListBox.Resources> 
    <ControlTemplate x:Key="textBoxControlTemplate" TargetType="ContentControl"> 
     <TextBox Text="{TemplateBinding Content}" /> 
    </ControlTemplate> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <ContentControl Content="{Binding Name}" Template="{StaticResource textBoxControlTemplate}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
निश्चित रूप से

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

0

उपयोगकर्ता नियंत्रण बनाएं और इसे डेटा टेम्पलेट के भीतर उपयोग करें।

<DataTemplate> 
    <local:MyComplexUserControl DataContext="{Binding Name}"/> 
</DataTemplate> 

और UserControl भीतर:

<StackPanel> 
    <TextBlock>Value:</Text> 
    <TextBox Text="{Binding}"/> 
</StackPanel> 

अपने स्वयं के प्रत्येक अवसर के लिए बाध्यकारी के साथ एक अलग DataTemplate है।

+0

आप उपयोगकर्ता नियंत्रण के बिना ऐसा कर सकते हैं I - बस संसाधन में ControlTemplate का उपयोग कर। –

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

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