рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ :) рдФрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЕрдкрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдлрд╛рдЙрдВрдбреЗрд╢рди (рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл) рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдПрдорд╡реАрд╡реАрдПрдо рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреГрдкрдпрд╛ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ WPF Microsoft рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИ :) рдпрд╣ рддрдХрдиреАрдХ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХреА рд╢реБрд░реБрдЖрдд рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдХреНрд╕рдкреА рд╕реЗ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ? рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ WPF .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдФрд░ рдмрд╛рдж рдореЗрдВ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, WPF рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛: WPF- рдЖрдзрд╛рд░рд┐рдд рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдврд╛рдВрдЪрд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ ред
WPF рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЦрд╛рд╕ рд╣реИ?
WPF рдФрд░ рдЕрдиреНрдп рдбреЗрд╕реНрдХрдЯреЙрдк рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рдмреАрдЪ рджреЛ рдореБрдЦреНрдп рдЕрдВрддрд░:
- XAML рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЦреБрдж рд╣реА рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- DirectX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдкрд╛рджрди, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рддреНрд╡рд░рдгред
рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ Google XAML, WPF рд░реЗрдВрдбрд░рд┐рдВрдЧ, milcore.dll рдФрд░ DirectX :)
рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ?
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ WPF рддрдХрдиреАрдХ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ:
рдореИрдВ рд▓реЗрдЦ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде "рдореЗрд░реЗ рдмрд╛рдж рджреЛрд╣рд░рд╛рдПрдВ" рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджрд┐рд╢рд╛ рдореЗрдВ рдЙрдиреНрдореБрдЦ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдЦ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
C # :) рдореЗрдВ рдереЛрдбрд╝рд╛ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрдиреБрднрд╡, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рднрд╛рд╖рд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрди (рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рди 10) рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдпрд╣ 2017 рд╣реЛрдЧрд╛, рдПрдХ рдореБрдХреНрдд рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)ред рд╡реАрдПрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдореИрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рд╣рдо рд╡реАрдПрд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдРрдк (.NET рдлреНрд░реЗрдорд╡рд░реНрдХ) (рдЖрдк рдЗрд╕реЗ рдКрдкрд░реА рджрд╛рдИрдВ рдУрд░ рдЦреЛрдЬ рдмрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдЗрд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред

рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдВрдбреЛ рдЦреБрд▓рддреА рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдиреАрдЪреЗ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдПрдбрд┐рдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдКрдкрд░ рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд╛рди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдЗрди рдмрдЯрди (рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рджрд╛рдИрдВ рдУрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдХреНрд░рдо рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдВ:

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рд╡рд┐рдВрдбреЛ рддрддреНрд╡ (рдЙрдиреНрд╣реЗрдВ рдХрдВрдЯреНрд░реЛрд▓ рд╢рдмреНрдж рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдХрдВрдЯреЗрдВрдЯрдХрдВрдЯреНрд░реЛрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдХрдВрдЯреЗрдирд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдмрдЪреНрдЪреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдФрд░ рдЙрдирдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
- рдЧреНрд░рд┐рдб - рдЖрдкрдХреЛ рдХреЙрд▓рдо рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдпрд╛ рдкрдВрдХреНрддрд┐ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реИред
- StackPanel - рдЖрдк рдмрдЪреНрдЪреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рд╕реНрддрдВрдн рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рднреА рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдиреЗрд╕реНрдЯреЗрдб рдХрдВрдЯреЗрдирд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдХрдВрдЯреЗрдирд░ рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╣реЛрдВред рдпрд╣ рдЖрдкрдХреЛ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдЦрд┐рдбрд╝рдХреА рдХреЛ рдЖрдХрд╛рд░ рджреЗрддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
MVVM рдФрд░ INotifyPropertyChanged рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдкрд╛рда рдХреА рдкреНрд░рддрд┐ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЛ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдЖрд╡реЗрджрди рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЖрдк рдкрд╛рда рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рджреГрд╢реНрдпред рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддрд╛рдЬрд╝рд╛ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХреНрд╕ 1 рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ), рд▓реЗрдЖрдЙрдЯ рд╕рдВрдкрд╛рджрдХ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрдЯреЗрдирд░ ( <рдЧреНрд░рд┐рдб> </ рдЧреНрд░рд┐рдб> ) рдХреЛ <рд╕реНрдЯреИрдХрдкреИрдирд▓> </ рд╕реНрдЯреИрдХрдкреИрдирд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред рдпрд╣ рдХрдВрдЯреЗрдирд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рдХреЗ рдКрдкрд░ рдПрдХ рджреЛ рдирд┐рдпрдВрддреНрд░рдг рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = "рд╡рд░реНрдЯрд┐рдХрд▓" рдЬреЛрдбрд╝рдХрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреИрдирд▓ рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ: рдкрд╛рда рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ред рдЪреВрдВрдХрд┐ рдЗрди рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡-рд╕рдорд╛рдкрди рдЯреИрдЧ (рдиреАрдЪреЗ рдХреЛрдб рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдХрдВрдЯреЗрдирд░ рд╡рд┐рд╡рд░рдг рдХреЛрдб рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
<StackPanel Orientation="Vertical"> <TextBox /> <TextBlock /> </StackPanel>
рдЕрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдмрдЪрддреЗ рд╣реБрдП, рдЙрд╕реА рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдЗрдХрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред WPF рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ C # -рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрдВрдбрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдмрд╛рд░, рджреВрд╕рд░реЗ, рдпрд╛ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдЬреЛ рд▓реЛрдЧ Qt рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдк рд╕реНрд▓реЙрдЯреНрд╕ рдФрд░ рд╕рд┐рдЧреНрдирд▓реНрд╕ рдХрд╛ рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдордп рдХреЛ рд▓рдВрдмрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЛрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рддреЛ, рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реА # рд╡рд░реНрдЧ рдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, XAML рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рджреЛрдиреЛрдВ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдкрд╛рда рдХреЛ рдкрд╛рда рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдзрди рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<TextBox Text="{Binding}"/> <TextBlock Text="{Binding}"/>
рд╣рдордиреЗ рдПрдХ рдмрдВрдзрди рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ :) рд╣рдореЗрдВ рдЗрд╕ рд╡рд╕реНрддреБ рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдЧ рдФрд░ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрдВрдзрди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рддреЛ рдпрд╣ рдХреМрди рд╕рд╛ рд╡рд░реНрдЧ рд╣реИ? рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рджреГрд╢реНрдп (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдЗрд╕рдХреЗ рднрд╛рдЧреЛрдВ) рдФрд░ рдореЙрдбрд▓ (рдореЙрдбрд▓, рдпрд╛рдиреА рдХреЛрдб рдХреЗ рдЙрди рднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ) ) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ (рджреГрд╢реНрдп, рджреГрд╢реНрдп) рдХреЛ рдореЙрдбрд▓-рд╡реНрдпреВ-рд╡реНрдпреВрдореЙрдбрд▓ (рдПрдорд╡реАрд╡реАрдПрдо) рдкреИрдЯрд░реНрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдореЗрдВ , рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдбреЗрдЯрд╛рдХреЛрдЯреЗрдХреНрд╕реНрдЯ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рд╡рд░реНрдЧ рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрдВрддреНрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдореЙрдбрд▓ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рджреГрд╢реНрдп рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ INotifyPropertyChanged рд╣реИ , рдЬрд┐рд╕рдореЗрдВ PropertyChanged рдЗрд╡реЗрдВрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ BaseViewModel рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЗрд╕ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рд╡реНрдпреВ рдореЙрдбрд▓ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдирдХрд▓ рди рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ ViewModels рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ BaseViewModel.cs рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рдЖрдзрд╛рд░ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб:
using System.ComponentModel; namespace Ex1.ViewModels { public class BaseViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }
рдЖрдЗрдП, рдЖрдзрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдЕрдкрдиреЗ рдореЗрдирд╡реЙрдВрдбреЛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА ViewModels рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, MainWindowViewModel.cs рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдРрд╕рд╛ рдХреЛрдб рд╣реЛрдЧрд╛:
namespace Ex1.ViewModels { public class MainWindowViewModel : BaseViewModel { } }
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдкрд╛рда рдХреЛ рдмрд╛рдВрдзреЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдпрд╣ рдкрд╛рда рд╣реИ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
public string SynchronizedText { get; set; }
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдРрд╕рд╛ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ
namespace Ex1.ViewModels { public class MainWindowViewModel : BaseViewModel { public string SynchronizedText { get; set; } } }
рддреЛ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреИрдпрд╛рд░ рд╣реИред рдЪрд▓реЛ рдЕрднреА рдХрд░рддреЗ рд╣реИрдВ:
<TextBox Text="{Binding Path=SynchronizedText}"/> <TextBlock Text="{Binding Path=SynchronizedText}"/>
Nishtyak, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ iiiii ... рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ))) рдареАрдХ рд╣реИ, рдпрд╣ рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЕрднреА рд╕рд╣реА рдмрд┐рдВрджреБ рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВред
рдореИрдВ рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рд░реБрдХрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдЬрд░рд┐рдпрд╛ рд╣реИред Viewmodel рднреАред рдЬрд╝рдмрд┐рдВрджрд┐рд▓реА рдЬреИрд╕реЗ рдЧреБрдгред рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдордиреЗ рдкрд╛рда рдХреА рдПрдХ рджрдпрдиреАрдп рд░реЗрдЦрд╛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рдХрд┐рдпрд╛, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ ???!! 111!
рдареАрдХ рд╣реИ, рдПрдХ рддрд░рдл рдордЬрд╛рдХ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдХреБрдЫ рдФрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред рд╣рдордиреЗ рд╕реНрд╡рдпрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдПрдВ рдирд╣реАрдВ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдХрд░реАрдм, рдореИрдВрдиреЗ WPF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд DataContext рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдореЗрдВ рдПрдХ DataContext рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MainWindow.xaml рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП F7 рджрдмрд╛рдПрдВред рдпрд╣ рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдВрдбреЛ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИред рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛ рдХреЗ рдбреЗрдЯрд╛рдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рд░рдЦреЗрдВ (рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ):
public MainWindow() { InitializeComponent(); this.DataContext = new MainWindowViewModel(); }
рдпрд╣ рд╕рд░рд▓ рдерд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдкрд╛рда рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ?
рдЬрдм SynchronizedText рдЧреБрдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ PropertyChanged рдЗрд╡реЗрдВрдЯ рдХреЛ рдЙрдард╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рд╕реЗ рдЙрд╕реЗ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдШрдЯрдирд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
public class MainWindowViewModel : BaseViewModel { private string _synchronizedText; public string SynchronizedText { get => _synchronizedText; set { _synchronizedText = value; OnPropertyChanged(nameof(SynchronizedText)); } } }
рд╣рдордиреЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ? рд╣рдордиреЗ рдкрд╛рда рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛, рдЗрд╕реЗ рдПрдХ рдореМрдЬреВрджрд╛ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд▓рдкреЗрдЯрд╛, рдФрд░ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рд╣рдо рди рдХреЗрд╡рд▓ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЖрдзрд╛рд░ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдирдкреНрд░реЛрдкрд░реНрдЯреАрдЪреЗрдВрдЬреНрдб рд╡рд┐рдзрд┐ рдХреЛ рднреА рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ INOTifyPropertyChanged рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдШреЛрд╖рд┐рдд рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреЗрдВрд╕реНрдб рдЗрд╡реЗрдВрдЯ рдХреЛ рднреА рдЖрдзрд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдореЙрдбрд▓ рджреЗрдЦреЗрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдкрд╛рда рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, PropertyChanged рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рдЧреБрдг рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЦреИрд░, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ, рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди! рдпрд╣ рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдирд╛ рдЪрд╛рд╣рд┐рдП:
<TextBox Text="{Binding Path=SynchronizedText, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"/> <TextBlock Text="{Binding Path=SynchronizedText, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>
рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдордиреЗ рдпрд╣ рднреА рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрджреНрдпрддрди рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ: рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЪреВрдВрдХрд┐ рд╣рдо рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдореЗрдВ рдкрд╛рда рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рджреГрд╢реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо OneWayToSource рдореЛрдб рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рда рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд╣рдо рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рдирд╡реЗ рдореЛрдб рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдПрдВ, рддреЛ рд╣рдо рдореЛрдб рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдпрд╛ TwoWay рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рддреЛ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ voi-la! рдкрд╛рда рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛!

рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо DataTemplate рдФрд░ рдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред