ডাব্লুপিএফ-এ কন্ট্রোল টেম্পলেট এবং ডেটা টেম্পলেটগুলির মধ্যে পার্থক্য


উত্তর:


267

সাধারণত একটি নিয়ন্ত্রণ তার নিজের জন্য রেন্ডার করা হয়, এবং অন্তর্নিহিত ডেটা প্রতিফলিত করে না। উদাহরণস্বরূপ, একটি Buttonকোনও ব্যবসায়িক অবজেক্টের সাথে আবদ্ধ হবে না - এটি সেখানে খাঁটিভাবে ক্লিক করা যায়। এ ContentControlবা ListBoxতবে সাধারণত উপস্থিত হয় যাতে তারা ব্যবহারকারীর জন্য ডেটা উপস্থাপন করতে পারে।

DataTemplate, তাই অন্তর্নিহিত তথ্যগুলির জন্য ভিজ্যুয়াল কাঠামো সরবরাহ করতে ব্যবহৃত হয়, তবে এর অন্তর্নিহিত ডেটাগুলির সাথে কোনও ControlTemplateসম্পর্ক নেই এবং কেবলমাত্র নিয়ন্ত্রণের জন্য ভিজ্যুয়াল বিন্যাস সরবরাহ করে।

একজন ControlTemplateসাধারণত শুধুমাত্র উপস্থিত থাকবে TemplateBindingএক্সপ্রেশন, বাঁধাই নিয়ন্ত্রণ নিজেই বৈশিষ্ট্য পিছনে, যখন একটি DataTemplateমান বাঁধাই এক্সপ্রেশন উপস্থিত থাকবে, বৈশিষ্ট্য বাঁধাই তার DataContext(কাজ / ডোমেইন বস্তু বা দৃশ্য মডেল)।


21
এর কোনও মানে ছিল? আমার ধারণা আমি প্রযুক্তিগত দিকগুলির চেয়ে দার্শনিক পার্থক্যগুলি ব্যাখ্যা করার চেষ্টা করছি।
ম্যাট হ্যামিল্টন

110

খুব ControlTemplateসহজেই কোনও কীভাবে একটি নিয়ন্ত্রণ DataTemplateপ্রদর্শন করতে হয় তা বর্ণনা করে যখন কীভাবে ডেটা প্রদর্শন করা যায় describes

উদাহরণ স্বরূপ:

Labelএকটি নিয়ন্ত্রণ এবং এতে একটি অন্তর্ভুক্ত থাকবে ControlTemplateযা কিছু সামগ্রীর (একটি বা অন্য কোনও নিয়ন্ত্রণ) Labelব্যবহার করে প্রদর্শিত হওয়া উচিত বলে উল্লেখ করে ।BorderDataTemplate

একটি Customerশ্রেণি হ'ল ডেটা এবং এটি ব্যবহার করে প্রদর্শিত হবে DataTemplateযা বলতে চাইবে যে দুটিতে একটি নাম দেখায় এবং অন্যটি ফোন নম্বর প্রদর্শন করে Customertype এটি উল্লেখ করা সহায়ক হতে পারে যে সমস্ত ক্লাস ব্যবহার করে প্রদর্শিত হয় , আপনি কেবলমাত্র ডিফল্ট টেম্পলেট ব্যবহার করবেন যা বস্তুর পদ্ধতির ফলাফলের জন্য সেট করা সম্পত্তি সহ একটি ।StackPanelTextBlocksDataTemplatesTextBlockTextToString


বর্ণনার সরলতার জন্য ভোট দিয়েছেন। অনেক প্রশংসিত.
পিট ম্যাগসিগ

31

ট্রয়েস লারসনের একটি ভাল ব্যাখ্যা রয়েছেএমএসডিএন ফোরামে

<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>

(টেম্পলেটগুলি স্পষ্টতই চুরি হয়ে গেছে http://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate.aspx এবং http: .controls.contentcontrol.contenttemplate% 28VS.95% 29.aspx যথাক্রমে)

যাইহোক, কন্ট্রোলটিম্পলেট বাটনটি কীভাবে দেখায় তা স্থির করে, কনটেন্টপেম্পলেটটি বোতামের সামগ্রী কীভাবে দেখায় তা স্থির করে। সুতরাং আপনি সামগ্রীটি আপনার কোনও একটি ডেটা ক্লাসে বেঁধে রাখতে পারেন এবং এটি চাইলেও উপস্থাপন করতে পারেন তবে আপনি এটি চান।


19

ControlTemplate: নিয়ন্ত্রণ শৈলী প্রতিনিধিত্ব করে।

DataTemplate: ডেটা শৈলীর প্রতিনিধিত্ব করে (আপনি কীভাবে আপনার ডেটা প্রদর্শন করতে চান)।

সমস্ত নিয়ন্ত্রণগুলি ডিফল্ট নিয়ন্ত্রণ টেম্পলেট ব্যবহার করে যা আপনি টেম্পলেট সম্পত্তি দ্বারা ওভাররাইড করতে পারেন।

উদাহরণস্বরূপ
Button টেমপ্লেট একটি নিয়ন্ত্রণ টেম্পলেট। Buttonসামগ্রী টেমপ্লেট একটি ডেটা টেমপ্লেট

<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");
    }
}

7

ControlTemplate- উপাদান উপস্থিতি পরিবর্তন করা। উদাহরণস্বরূপ Buttonচিত্র এবং পাঠ্য থাকতে পারে

DataTemplate - উপাদানগুলি ব্যবহার করে অন্তর্নিহিত ডেটা উপস্থাপন করা।


1

ControlTemplateচাক্ষুষ উপস্থিতি DataTemplateসংজ্ঞায়িত করে, একটি ডেটা আইটেমের ভিজ্যুয়াল উপস্থিতিকে প্রতিস্থাপন করে।

উদাহরণ: আমি আয়তক্ষেত্র থেকে বৃত্তের ফর্ম => নিয়ন্ত্রণ টেম্পলেট পর্যন্ত একটি বোতামটি দেখাতে চাই।

এবং যদি আপনার নিয়ন্ত্রণে জটিল অবজেক্ট থাকে তবে এটি কেবল কল করে এবং শো করে ToString(), DataTemplateআপনি বিভিন্ন সদস্য পেতে এবং ডেটা অবজেক্টের তাদের মানগুলি প্রদর্শন এবং পরিবর্তন করতে পারেন।


0

উপরের সমস্ত উত্তর দুর্দান্ত তবে একটি মূল পার্থক্য রয়েছে যা মিস হয়েছিল। এটি কখন কী ব্যবহার করবেন সে সম্পর্কে আরও ভাল সিদ্ধান্ত নিতে সহায়তা করে। এটি ItemTemplateসম্পত্তি:

  • ডেটা টেম্পলেটটি এমন উপাদানগুলির জন্য ব্যবহৃত হয় যা আপনার আইটেমের বিষয়বস্তুগুলির প্রতিস্থাপনের জন্য আইটেম টেম্প্লেট সম্পত্তি সরবরাহ করে যা আপনি সরবরাহকারীরDataTemplate মাধ্যমে আবদ্ধ ডেটা অনুযায়ী পূর্বে নির্ধারণ করেন।

  • তবে যদি আপনার নিয়ন্ত্রণ আপনার জন্য এই বিলাসিতা সরবরাহ না করে তবে আপনি এখনও ContentViewএমন একটি ব্যবহার করতে পারেন যা পূর্বনির্ধারিত থেকে এর সামগ্রী প্রদর্শন করতে পারে ControlTemplate। মজার বিষয় হল, আপনি রানটাইমের ControlTemplateসময় আপনার সম্পত্তি পরিবর্তন করতে পারেন ContentView। আরও একটি বিষয় লক্ষণীয় যে ItemTemplateসম্পত্তির সাথে নিয়ন্ত্রণগুলির বিপরীতে , আপনার TemplateSelector(কন্টেন্টভিউ) নিয়ন্ত্রণের জন্য এটি থাকতে পারে না । তবে আপনি ControlTemplateরানটাইমের সময় পরিবর্তন করতে ট্রিগার তৈরি করতে পারেন create

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.