DataTemplate در WPF

سه شنبه 21 اردیبهشت 1395

قالب داده (data template)یک بیت XAML است که نحوه ی اتصال اطلاعات نمایش داده شده را توضیح میدهد، در این مقاله قصد داریم درباره ی DataTemplate در WPF صحبت کنیم.

 DataTemplate در WPF

قالب داده (data template)یک بیت XAML است  که نحوه ی اتصال  اطلاعات نمایش داده شده را توضیح میدهد . یکdata template  میتواند شامل المانهایی باشد که هر کدام به پروپرتی  مربوط  به داده ،همراه با نشانه گذاری های اضافه متصل شده اند تا به این ترتیب رنگ ، ظاهر و layout را مشخص کنند. data template اساسا  برای تعیین ظاهر داده های نمایش داده شده توسط یک کنترل استفاده میشوند ،نه برای ظاهر خود کنترل.

بنابراین، DataTemplate  می تواند به کنترل محتوا و یا ItemsControl اعمال شود. نام  پروپرتی که شما می توانید به یک DataTemplate اختصاص دهید، بستگی به این دارد که آیا کنترل یک کنترل محتوا یا ItemsControl است یا نه.

کنترل  می تواند شامل یک آیتم ( single logical child از نوع Object  ) به نام کنترل محتوا (content control) باشد.  این کنترل  از کلاس پایه ContentControl    مشتق شده که می تواند شامل مجموعه ای از آیتم ها (چند logical children از نوع Object)به نام  وضعیت کنترل(items control) باشد.
با یک مثال آن را توضیح میدهیم.

 ما یک ListBox  برای پر کردن جزئیات کارمند از قبیل نام کارمند،کد کارمند ،رشته و شماره تلفن، میخواهیم.

اما، در listbox می توان تنها با یک پروپرتی داده از کلاس Employee (در زیر نمایش داده) محدود شده است. ما در پروپرتی اتصال  Listbox itemsource در آرایه  employee، متد ToString() را فراخوانی ومقدار  افراد را در listbox برمیگرداند.

data

اگر متد ToString () بازنویسی شود و روی مقدار مورد نظر برگردد(return شود)، همان را می توان در ListBox نمایش داد

    public override string  ToString()  
            {  
                return this.Name;  
            }  

 نمایش داده :

 

 بنابراین، نیاز به تغییر ItemTemplate مربوط به ListBox داریم.

 

Datatemplate باید جزئیات یک کارمند مانند تصویر بالا نشان داده شده نمایش دهد،  تغییر دهیم

    <DataTemplate x:Key="myTemplate">  
                <StackPanel>  
                    <Label Background="Purple" Foreground="White" BorderBrush="Red" BorderThickness="4">  
                        <Label.Content>  
                            <WrapPanel HorizontalAlignment="Stretch">  
                                <TextBlock>Emplyoee Name:</TextBlock>  
                                <TextBlock Text="{Binding Name}" />  
                            </WrapPanel>  
                        </Label.Content>  
                    </Label>  
                    <Label  BorderBrush="Black" HorizontalAlignment="Stretch" Background="Yellow" BorderThickness="3" Foreground="Blue">  
                        <Label.Content>  
                            <StackPanel>  
                                <WrapPanel>  
                                    <TextBlock> Employee Nr.:</TextBlock>  
                                    <TextBlock Text="{Binding EmployeeNr}"/>  
                                </WrapPanel>  
                                <WrapPanel>  
                                    <TextBlock> Department:</TextBlock>  
                                    <TextBlock Text="{Binding Dept}"/>  
                                </WrapPanel>  
                                <WrapPanel>  
                                    <TextBlock> Telephone:</TextBlock>  
                                    <TextBlock Text="{Binding TelephoneNr}"/>  
                                </WrapPanel>  
                            </StackPanel>  
                        </Label.Content>  
                    </Label>  
                </StackPanel>  
            </DataTemplate>  

 

توصیه می شود که قالب داده ها در یک مجموعه منابع تعریف شوند و به جای تعریف درون خطی به عنصر خود اشاره کنند .  برای استفاده مجدد  یک قالب داده  لازم است   ، این الگو را در یک مجموعه منابع تعریف و یک ویژگی کلیدی برای الگو تنظیم  کند، مانند شکل زیر

 

    <Window.Resources>   
            <DataTemplate x:Key="myTemplate">  
      
    <!--- details here - - >  
      
    </DataTemplate>  
        </Window.Resources>  

 

پس از آن شما می توانید قالب را با رجوع به منابع تنظیم کنید

 

    <ListBox ItemTemplate="{StaticResource myTemplate}" Name="empList" />  

هنگامی که یک پراپرتی یا لیست به طور مستقیم به یک کنترل bind میشود  ، شما تنها به bind یک پروپرتی محدود شده اید. با قالب داده، با این حال، شما می توانید بیش از یک پروپرتی در هر یک از آیتم ها bind  ، و  در نتیجه بیت چندگانه داده ها مرتبط با هم نمایش دهد.

 

فایل های ضمیمه

سجاد باقرزاده

نویسنده 54 مقاله در برنامه نویسان
  • WPF
  • 1k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید