DataTemplate در WPF
سه شنبه 21 اردیبهشت 1395قالب داده (data template)یک بیت XAML است که نحوه ی اتصال اطلاعات نمایش داده شده را توضیح میدهد، در این مقاله قصد داریم درباره ی 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 برمیگرداند.
اگر متد 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 ، و در نتیجه بیت چندگانه داده ها مرتبط با هم نمایش دهد.
- WPF
- 1k بازدید
- 1 تشکر