
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрд░реЛрдд [
1 ,
2 ]
рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ "рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдпрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдШреЛрд╖рдгрд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ", рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд
3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [
3 ]
ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рдореИрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рд▓рд╛рдЧреВ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛: рдПрдХ рдирдИ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдХреБрдЫ рдЪреЗрддрд╛рд╡рдиреА:
1. рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд░реБрдЪрд┐ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗред
2. рдбреЗрдореЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд░рд▓реАрдХрд░рдг рдХрд┐рдП рдЧрдП рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MVVM рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐) рддрд╛рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рд╣реИ: "рдЧреБрдг рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдпрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдШреЛрд╖рдгрд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред" рдпрд╣ рд╡рд╣реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ? рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдмрд╕ рд╡рд░реНрдЧ, рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рд╡рд░реНрдЧ, рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА, рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╣рдбрд╝рддрд╛рд▓реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ NonSerializedAttribute рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ [
4 ]
ред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдЕрдВрдХрди рд╕реЗ рдкрд╣рд▓реЗред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдореЗрдВ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧрд╛ред
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХреА рд╣реИ, рдЬреЛ рд▓рд┐рдВрдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЪрд▓реЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
public class Person { [DisplayAttribute(Name="")] [RequiredAttribute()] public string LastName { get; set; } [Display(Name = "")] [Required()] public string FirstName { get; set; } [Display(Name = "")] public string Patronym { get; set; } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЖрдкрд╕реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ:
1. "рдкреНрд░рддреНрдпрдп" рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп: рд╡рд┐рд╢реЗрд╖рддрд╛, рдЖрдк рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддреЗред
2. рдЕрдВрддрд┐рдо рдирд╛рдо рдФрд░ рдкреНрд░рдердо рдирд╛рдо рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдордзреНрдп рдирд╛рдо рдирд╣реАрдВ
рдпрджрд┐ рдЖрдк рдФрд░ рдореИрдВ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдиреА рднреА рдЕрдкреНрд░рд┐рдп рдзреНрд╡рдирд┐ рдХреНрдпреЛрдВ рди рд╣реЛ, рд╣рдо рдЗрд╕реЗ рд░рд┐рдХреНрдд рд▓рд╛рд╕реНрдЯрдирд╛рдо рдФрд░ рдлрд░реНрд╕реНрдЯрдирд╛рдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрдХреНрд╖рд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдлрд┐рд░ рд╡рд╣ рдХреНрдпреЛрдВ рд╣реИ? рдФрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рднрд░рдиреЗ рддрдХ рд╕рдВрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рди рдХрд░ рд╕рдХреЗред
рдЖрд╡реЗрджрди рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

рдорд╛рдирд╡реАрдп рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо UserControl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рдХреЗрд╡рд▓ рдиреАрдЪреЗ рдХрд╛ рдлрд╝реЙрд░реНрдо рдХреНрдпреЛрдВ рдирд╣реАрдВ):
<UserControl x:Class="AttributeExample.PersonEditor" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <TextBlock Text="" /> <TextBox Text="{Binding LastName,UpdateSourceTrigger=Explicit}" /> <TextBlock Text="" /> <TextBox Text="{Binding FirstName,UpdateSourceTrigger=Explicit}" /> <TextBlock Text="" /> <TextBox Text="{Binding Patronym,UpdateSourceTrigger=Explicit}" /> </StackPanel> </UserControl>
Cs рдореЗрдВ рдЗрд╕ UserControl рдХреА рдлрд╛рдЗрд▓ рднреА рдирд╣реАрдВ рдЪрдврд╝рддреА рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрд░реЛрдд рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? [
рел ]
рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЦрд┐рдбрд╝рдХреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдЬреЛ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреА рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдкреВрд░реНрдгрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреА, рдФрд░, рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдХреЗ рдмрдВрдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред
рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдПрдБ:
<Window x:Class="AttributeExample.IngeniousWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="IngeniousWindow" MinWidth="300" SizeToContent="WidthAndHeight" > <Window.Resources> <Style TargetType="Button"> <Setter Property="Grid.Row" Value="2" /> <Setter Property="HorizontalAlignment" Value="Right" /> <Setter Property="Width" Value="100" /> </Style> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="1*" /> <RowDefinition Height="35" /> </Grid.RowDefinitions> <StackPanel x:Name="spErrors" Visibility="Collapsed" Background="#FFCCCC"> <TextBlock Text=" :" /> <ListView x:Name="lvProperties" Background="#FFCCCC" /> </StackPanel> <ContentPresenter Grid.Row="1" x:Name="cpEditor" /> <Button Margin="5" x:Name="btCancel" Content="" Click="btCancel_Click" /> <Button Margin="5,5,110,5" x:Name="btApply" Content="" Click="btApply_Click" /> </Grid> </Window>
рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
public partial class IngeniousWindow : Window { FrameworkElement _controlForShow = null; public IngeniousWindow(FrameworkElement p_controlForShow) { InitializeComponent(); _controlForShow = p_controlForShow; cpEditor.Content = p_controlForShow; } }
рд░рджреНрдж рдХрд░реЗрдВ рдмрдЯрди рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:
private void btCancel_Click(object sender, RoutedEventArgs e) { DialogResult = false; }
рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рд╕реНрд╡реАрдХрд╛рд░ рд╣реИ:
private void btApply_Click(object sender, RoutedEventArgs e) { List<string> requiredPropertyNames = new List<string>();
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛, рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛: GetChildTextBoxes, рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдпрд╣ рджреГрд╢реНрдп рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рднреА TextBox рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ
рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм рд╣реИред рд╣рдо рдмрдЯрди рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рддреЗрдЬ рдХрд░рддреЗ рд╣реИрдВ:
private void btAdd_Click(object sender, RoutedEventArgs e) { Person person = new Person(); PersonEditor editor = new PersonEditor() { DataContext = person }; IngeniousWindow window = new IngeniousWindow(editor); if (window.ShowDialog().Value) { _people.Add(person); } } private void btEdit_Click(object sender, RoutedEventArgs e) { if (lvPeople.SelectedItem != null) { Person person = lvPeople.SelectedItem as Person; PersonEditor editor = new PersonEditor() { DataContext = person }; IngeniousWindow window = new IngeniousWindow(editor); window.ShowDialog(); } }
рдЦреИрд░, рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рд╕реВрддреНрд░, рдпрджрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╛рда рдореЗрдВ рд▓рд┐рдВрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рддреЛ
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ (рд╡реАрдПрд╕ 11 рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдпрджрд┐ рд╡рд╣ рд╣реИ)ред
Ps рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ: "рдФрд░ рдЯреЛрдкреА рдореЗрдВ рдЪрд┐рддреНрд░ рдХрд╣рд╛рдБ рд╣реИ?" рдареАрдХ рд╣реИ, рдореИрдВ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЗрд╕ рд▓рдХреНрд╖рдг рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
1.
MSDN - рдкрд╛рда рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (C # рдФрд░ Visual Basic)2.
dotsite - рдкрд╛рда рдореЗрдВ C # рдХреЗ рдЧреБрдг рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ3.
MSDN - рдкрд╛рда рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм (C # рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдмреЗрд╕рд┐рдХ)4.
MSDN - NonSerializedAttribute - рдкрд╛рда рдХреЛ рд╡рд░реНрдЧ5.
MSDN - рдмрд╛рдЗрдВрдбрд┐рдВрдЧред UpdateSourceTrigger - рдкрд╛рда рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐