में नियंत्रण टेम्पलेट और डेटा टेम्पलेट के बीच अंतर WP12 में ControlTemplate
और DataTemplate
के बीच क्या अंतर है?WPF
WPF
उत्तर
आमतौर पर एक नियंत्रण अपने स्वयं के लिए प्रदान किया जाता है, और अंतर्निहित डेटा को प्रतिबिंबित नहीं करता है। उदाहरण के लिए, Button
किसी व्यावसायिक ऑब्जेक्ट से बाध्य नहीं होगा - यह पूरी तरह से है इसलिए इसे क्लिक किया जा सकता है। एक ContentControl
या ListBox
, हालांकि, आम तौर पर दिखाई देते हैं ताकि वे उपयोगकर्ता के लिए डेटा प्रस्तुत कर सकें।
ए DataTemplate
, इसलिए, अंतर्निहित डेटा के लिए दृश्य संरचना प्रदान करने के लिए उपयोग किया जाता है, जबकि ControlTemplate
में अंतर्निहित डेटा के साथ कुछ लेना देना नहीं है और केवल नियंत्रण के लिए दृश्य लेआउट प्रदान करता है।
एक ControlTemplate
आम तौर पर केवल TemplateBinding
भाव में शामिल होंगे, वापस नियंत्रण पर ही गुण के लिए बाध्य है, जबकि एक DataTemplate
मानक बाध्यकारी भाव में शामिल होंगे, इसकी DataContext
(व्यवसाय/डोमेन वस्तु या दृश्य मॉडल) के गुणों के लिए बाध्य।
बहुत मूल रूप से ControlTemplate
बताता है कि DataTemplate
डेटा को प्रदर्शित करने का वर्णन करता है, जबकि नियंत्रण को प्रदर्शित करने का तरीका बताता है।
उदाहरण के लिए:
एक Label
एक नियंत्रण है और एक ControlTemplate
जो Label
कुछ सामग्री के चारों ओर एक Border
(एक DataTemplate
या किसी अन्य नियंत्रण) का उपयोग कर प्रदर्शित किया जाना चाहिए कहते हैं शामिल होंगे।
एक Customer
वर्ग डाटा है और एक DataTemplate
जो एक StackPanel
दो TextBlocks
एक नाम दिखा और अन्य फ़ोन नंबर प्रदर्शित करने वाले के रूप में Customer
प्रकार प्रदर्शित करने के लिए कह सकते हैं का उपयोग कर प्रदर्शित किया जाएगा। यह ध्यान रखना उपयोगी हो सकता है कि सभी वर्ग DataTemplates
का उपयोग करके प्रदर्शित होते हैं, आप आमतौर पर के साथ डिफ़ॉल्ट टेम्पलेट का उपयोग करेंगे Text
संपत्ति ऑब्जेक्ट की ToString
विधि के परिणामस्वरूप सेट की गई है।
ControlTemplate
- तत्व की उपस्थिति को बदलना। उदाहरण के लिए Button
में छवि और टेक्स्ट
DataTemplate
- तत्वों का उपयोग करके अंतर्निहित डेटा का प्रतिनिधित्व कर सकते हैं।
ControlTemplate
: नियंत्रण शैली का प्रतिनिधित्व करता है।
DataTemplate
: डेटा शैली का प्रतिनिधित्व करता है (आप अपना डेटा कैसे दिखाना चाहते हैं)।
सभी नियंत्रण डिफ़ॉल्ट नियंत्रण टेम्पलेट का उपयोग कर रहे हैं जिन्हें आप टेम्पलेट संपत्ति के माध्यम से ओवरराइड कर सकते हैं।
उदाहरण
Button
टेम्पलेट के लिए एक नियंत्रण टेम्पलेट है। Button
सामग्री टेम्पलेट DataTemplate
एक डेटा आइटम का दृश्य स्वरूप बदल देता
<Button VerticalAlignment="Top" >
<Button.Template>
<ControlTemplate >
<Grid>
<Rectangle Fill="Blue" RadiusX="20" RadiusY="20"/>
<Ellipse Fill="Red" />
<ContentPresenter Content="{Binding}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="50">
<TextBlock Text="Name" Margin="5"/>
<TextBox Text="{Binding UserName, Mode=TwoWay}" Margin="5" Width="100"/>
<Button Content="Show Name" Click="OnClickShowName" />
</StackPanel>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
public String UserName
{
get { return userName; }
set
{
userName = value;
this.NotifyPropertyChanged("UserName");
}
}
Troels लार्सन MSDN forum
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="ButtonContentTemplate">
<StackPanel Orientation="Horizontal">
<Grid Height="8" Width="8">
<Path HorizontalAlignment="Stretch"
Margin="0,0,1.8,1.8"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FF000000"
Data="M0.5,5.7 L0.5,0.5 L5.7,0.5"/>
<Path HorizontalAlignment="Stretch"
Margin="2,3,0,0"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FFFFFFFF"
Data="M3.2,7.5 L7.5,7.5 L7.5,3.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1.2,1.4,0.7,0.7"
VerticalAlignment="Stretch" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000"
Data="M2.5,2.5 L7.5,7.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1.7,2.0,1,1"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FF000000"
Data="M3,7.5 L7.5,7.5 L7.5,3.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1,1,1,1"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FFFFFFFF"
Data="M1.5,6.5 L1.5,1 L6.5,1.5"/>
</Grid>
<ContentPresenter Content="{Binding}"/>
</StackPanel>
</DataTemplate>
<ControlTemplate TargetType="Button" x:Key="ButtonControlTemplate">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Window.Resources>
<StackPanel>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="1"/>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="2"/>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="3"/>
</StackPanel>
</Window>
कोड हजारों शब्दों के लायक है –
ControlTemplate
दृश्य उपस्थिति को परिभाषित पर एक अच्छी व्याख्या है एक डेटा टेम्पलेट है,।
उदाहरण: मैं आयताकार से सर्कल फॉर्म => नियंत्रण टेम्पलेट से एक बटन दिखाना चाहता हूं।
और यदि आपके पास नियंत्रण में जटिल वस्तुएं हैं, तो यह पर कॉल करता है और दिखाता है, DataTemplate
के साथ आप विभिन्न सदस्यों को प्राप्त कर सकते हैं और डेटा ऑब्जेक्ट के अपने मूल्य प्रदर्शित और बदल सकते हैं।
क्या यह समझ में आया? मुझे लगता है कि मैं तकनीकी लोगों की बजाय दार्शनिक मतभेदों को समझाने की कोशिश कर रहा हूं। –