WP, Win8 рдХреЗ рдмреАрдЪ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ред рднрд╛рдЧ реи

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджреЗрдЦреАрдВред рдЗрд╕ рд▓реЗрдЦ рдХреЛ W8.1 рдФрд░ WP8.1 рдХреЗ рдмреАрдЪ рдмрд┐рд▓реНрдб рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рд╛рдЭрд╛рдХрд░рдг рд╕реБрд╡рд┐рдзрд╛ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдо рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдРрдкреНрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рдиреЗ рдХреЗ рдХрджрдореЛрдВ рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7 рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдбреЗрд╕реНрдХрдЯреЙрдк, рдПрдВрдбреНрд░реЙрдЗрдб, рдЖрджрд┐ рдкрд░ рднреА рдлрд╝реЗрд▓ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред



рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рд░рд╣реА рд╣реИ



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд "рдЯреВрд▓" рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ / рдХрд┐рддрд╛рдмреЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред



MVVM рдкреИрдЯрд░реНрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ WP, W8, WPF, рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓рдЧрднрдЧ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИ; рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдХреНрд╕рд░ рд╕рдордп рдФрд░ рдХреЛрдб рдХрд╛ рдПрдХ рдЯрди рдмрдЪрд╛рддрд╛ рд╣реИред



рдореБрдЦреНрдп рдЧрд▓рдд рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдХреНрд╕рд░ рдореБрдарднреЗрдбрд╝ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдорд╡реАрд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдЖ рдЬрд╛рдПрдЧреАред рдпрд╛ рдХрд┐ рдпрд╣ рдкреИрдЯрд░реНрди рдмрджрд▓реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕рд┐рдХ рдереНрд░реА-рд▓рд┐рдВрдХред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, MVVM рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЙрдЬрд┐рдХ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ: рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рд╡реАрдПрдо рдореЗрдВ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЙрдЬрд┐рдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб-рдмрд┐рд╣рд╛рдЗрдВрдб рдорд┐рд▓реЗрдЧрд╛, рдХреЗрд╡рд▓ рд╡реАрдПрдо рдореЗрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



WP рдФрд░ WinRT рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪрд╛ рд╢рд╛рдпрдж MVVM рд▓рд╛рдЗрдЯ рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рд╣рд▓реНрдХреЗ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред



рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ - рдпрджрд┐ рд╣рдо рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп MVVM рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ, рд╢рд╛рдпрдж, рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрдирд╛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдордВрдЪ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, IoC рд▓рдЪреАрд▓рд╛, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред



рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ IoC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред



рдХрдИ рддреИрдпрд╛рд░ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдореИрдВ рд╕реНрд╡рдпрдВ-рд╕реЗрд╡рд╛ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдХрд┐, рдХрдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдВрдЯреАрдкреИрдЯрд░реНрди рд╣реИ), рдФрд░ рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдВ рд╣рд▓реНрдХреЗ SimpleIoC рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ, рд╡реИрд╕реЗ, MVVM рд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред



рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдкрд╛рда рдХреА рдмрдЪрдд рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ , рдЬрд╣рд╛рдВ рд╣рдордиреЗ "#if WP7" рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдмрдЪрдд рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рдбреЗрдЯрд╛рд▓реЗрдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдореЗрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



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

public interface IDataLayer { Task SaveText(string text); }
      
      





рд╣рдо рдЕрдкрдиреЗ рд▓реЙрдЬрд┐рдХ рд▓реЗрдпрд░ рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 public class LogicLayer : ILogicLayer { private readonly IDataLayer dataLayer; public LogicLayer(IDataLayer dataLayer) { this.dataLayer = dataLayer; } public void SomeAction() { dataLayer.SaveText("myText"); } }
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд░реНрдХ рдкрд░рдд рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда рдХреЛ рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рддрджрдиреБрд╕рд╛рд░, WP7 / WP8 рдХреЗ рд▓рд┐рдП рдкрд╛рда-рдмрдЪрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

 public class DataLayerWP : IDataLayer { public async Task SaveText(string text) { using (var local = IsolatedStorageFile.GetUserStoreForApplication()) { using (var stream = local.CreateFile("DataFile.txt")) { using (var streamWriter = new StreamWriter(stream)) { streamWriter.Write(text); } } } } }
      
      





рдФрд░, рддрджрдиреБрд╕рд╛рд░, WP8 / W8 рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

 public class DataLayerWinRT : IDataLayer { public async Task SaveText(string text) { var fileBytes = Encoding.UTF8.GetBytes(text); var local = ApplicationData.Current.LocalFolder; var file = await local.CreateFileAsync("DataFile.txt", CreationCollisionOption.ReplaceExisting); using (var s = await file.OpenStreamForWriteAsync()) { s.Write(fileBytes, 0, fileBytes.Length); } } }
      
      





рдмреЗрд╢рдХ, рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдореЗрд▓ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣реЛрдЧрд╛ред



рдЕрдм рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд╣рдо SimpleIoC рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкрдВрдЬреАрдХрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ (WP7 рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ):



SimpleIoc.Default.Register<IDataLayer,DataLayerWP>();





рдФрд░ WP8 рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ:

SimpleIoc.Default.Register<IDataLayer,DataLayerWinRT>();







рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкреГрд╖реНрда-рджрд░-рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди, рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ html рдкреГрд╖реНрда рдЦреЛрд▓рдирд╛, рдЖрджрд┐ред рдЖрджрд┐



рдЬреЛ рд▓реЛрдЧ рдПрдХреНрд╕рдорд░реАрди рдХреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХреНрд╕рдорд░реАрди рдореЛрдмрд╛рдЗрд▓ рдПрдк рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдбреЗрдЯрд╛ рдХреА рдмрдЪрдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕реНрдерд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХреИрдорд░рд╛ рдЫрд╡рд┐, рдЖрджрд┐ред



рдкреЛрд░реНрдЯреЗрдмрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред VS2012 рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ - рдкреЛрд░реНрдЯреЗрдмрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреАрдПрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдпрд╣ рдЕрд╡рд╕рд░ VS2010 рдХреЗ рд╕рд╛рде рднреА рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВред рдкреАрдПрд▓ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдореБрдЦреНрдп "рдЯреНрд░рд┐рдХ" рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдПрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рднрд╛рд╖рд╛ рдХреА рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЪрдпрдирд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред рдпрд╣ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдкрдиреА рд╕реАрдорд╛рдПрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк PL рдореЗрдВ XAML рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреАрдПрд▓ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рднрд╛рд░реА рдмрдЪрдд рд▓рд╛рдПрдЧрд╛ред

рд╢рд╛рдпрдж, рдпрд╣ рдЕрд▓рдЧ рд╕реЗ CallerMember рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ PL рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬреЛ рдЖрдкрдХреЛ BaseViewModel рдореЗрдВ рд╕рднреА VMs рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:



 public class BaseViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName]string propertyName=null) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } }
      
      





рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 public string Name { get { return name; } set { name = value; OnPropertyChanged("Name"); } }
      
      





рдХреНрд╖реЗрддреНрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд┐рдХреЙрд░реНрдб:

 public string Name { get { return name; } set { name = value; OnPropertyChanged(); } }
      
      





рдЬреЛ, рддрджрдиреБрд╕рд╛рд░, рдЖрд╡реЗрджрди рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред



рдкреАрдПрд▓ рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

CallerMemberNameAttribute.cs



 namespace System.Runtime.CompilerServices { // Summary: // Allows you to obtain the method or property name of the caller to the method. [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] sealed class CallerMemberNameAttribute : Attribute { } // Summary: // Allows you to obtain the line number in the source file at which the method // is called. [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class CallerLineNumberAttribute : Attribute { } // Summary: // Allows you to obtain the full path of the source file that contains the caller. // This is the file path at the time of compile. [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class CallerFilePathAttribute : Attribute { } }
      
      







рд╕реЗрдЯрдЕрдк рдФрд░ рдХрдиреЗрдХреНрд╢рди



Habr рдкрд░ рднреА MVVM рдФрд░ IoC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдереЗ, рдореИрдВ рдпрд╣рд╛рдВ рд▓реЗрдЦ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрдИ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛:

Xamarin + PCL + MVVM - рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреИрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред - рдЬрд╝рд╛рдорд░реАрди рдФрд░ рдПрдорд╡реАрд╡реАрдПрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╢рд╛рдирджрд╛рд░ рд▓реЗрдЦ



рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп MVVM рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк MVVM рдФрд░ WP рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред



рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди + Caliburn.Micro + рдСрдЯреЛрдлреЗрдХ ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп Caliburn.Micro MVVM рдлреНрд░реЗрдорд╡рд░реНрдХ, рдФрд░ рдСрдЯреЛрдлреЗрдХ IoC рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рдФрд░ рд▓реЗрдЦ, рд╡реЗрдм рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреЛрдИ рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИред



рдмреЗрд╢рдХ, рдпрд╣ рдЕрдВрддрд┐рдо рд╕реВрдЪреА рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рд╣реЗрдмреНрд░рд╛ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



VM рдХреЛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛



рдкрд╣рд▓рд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдо рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдХрд╛рдлреА рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рд╣рдо рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдПрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 public class MainViewModel : BaseViewModel { private int valueA; public int ValueA { get { return valueA; } set { valueA = value; OnPropertyChanged(); } } private int valueB; public int ValueB { get { return valueB; } set { valueB = value; OnPropertyChanged(); } } public ICommand CalculateCommand { get { return new ActionCommand(CalculateResult); } } private void CalculateResult() { Result = ValueA + ValueB; } private int result; public int Result { get { return result; } private set { result = value; OnPropertyChanged(); } } }
      
      





рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рд░рд▓ XAML рдХреЛрдб рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ

 <StackPanel> <TextBlock Text="A:"></TextBlock> <TextBox Text="{Binding ValueA, Mode=TwoWay}"></TextBox> <TextBlock Text="B:"></TextBlock> <TextBox Text="{Binding ValueB, Mode=TwoWay}"></TextBox> <Button Command="{Binding CalculateCommand}" Content=""></Button> <TextBlock Text="{Binding Result}"></TextBlock> </StackPanel>
      
      





рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбрд┐рдЯреЗрд▓ рд╡реА.рдПрдо.



рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Win8 рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рд╕реНрдХреНрд░реАрди рд╣реИ, рдХрд╛рд░реНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдФрд░ WP рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдкрд░рд┐рдгрд╛рдо 100 рд╕реЗ рдХрдо рд╣реИред



рдкрд╣рд▓рд╛ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЧрд▓рдд рдирд┐рд░реНрдгрдп рдЬрд┐рд╕реЗ рдЖрдк рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 private int result; public int Result { get { return result; } private set { result = value; OnPropertyChanged(); OnPropertyChanged("ResultTextWP"); OnPropertyChanged("ResultTextWinRT"); } } public string ResultTextWP { get { if (result < 100) return Result.ToString(); return NumberUtil.ToText(Result); } } public string ResultTextWinRT { get { return NumberUtil.ToText(Result); } }
      
      





рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо VM рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред PL рдореЗрдВ рд╡рд░реНрдЧ MainViewModel рдореЗрдВ рд╣рдо рдПрдХ рдЖрднрд╛рд╕реА рдХреНрд╖реЗрддреНрд░ рдкрд░рд┐рдгрд╛рдо рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 private int result; public int Result { get { return result; } private set { result = value; OnPropertyChanged(); OnPropertyChanged("ResultText"); } } public virtual string ResultText { get { throw new NotImplementedException(); } }
      
      





рд╣рдо рдлреЗрдВрдХрдиреЗ рдХреА рдЬрдЧрд╣ рдирдпрд╛ NotImplementedException () рдХреИрд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NumberUtil.ToText (рдкрд░рд┐рдгрд╛рдо) рдХреЗ рд╕рд╛рде, рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд░рд┐рд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХреГрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ



рдЕрдм рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ MainViewModel рдХрд╛ рд╡рд╛рд░рд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 public class MainViewModelWinRT : MainViewModel { public override string ResultText { get { return NumberUtil.ToText(Result); } } }
      
      





рдФрд░ WP рдХреЗ рд▓рд┐рдП:

 public class MainViewModelWP : MainViewModel { public override string ResultText { get { if (result < 100) return Result.ToString(); return NumberUtil.ToText(Result); } } }
      
      





рдмреЗрд╢рдХ, IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп MainViewModel рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдпрджрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА VM рд╕рдВрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдордВрдЪ рдкрд░ рд╣реИ - рд╕реНрд╡рдпрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛, рдЗрд╕реЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдХреЗрд╡рд▓ W8 рдХреЗ рд▓рд┐рдП UI рдореЗрдВ рджрд┐рдирд╛рдВрдХ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 public class MainViewModelWinRT : MainViewModel { public override string ResultText { get { return NumberUtil.ToText(Result); } } public string Date { get { return DateTime.Now.ToString("yy-mm-dd"); } } }
      
      







рд╕рд╛рд░рд╛рдВрд╢



рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рд╣рдореЗрдВ MVVM, IoC, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рд┐рд░рджрд░реНрдж рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдорд┐рд▓рддреА рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рд╕рд┐рд░реНрдл #if рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред



рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдордзреНрдпрдо рдФрд░ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб "рд╕реЗрд╡рд╛" рдХреЛрдб рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрдо рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реИред



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, "рдУрд╡рд░рдмреЛрд░реНрдб" рдЕрднреА рднреА рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░реЛрдХрдирд╛ рди рд╣реЛред рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ / рд╡рд┐рд╖рдпреЛрдВ / рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред



All Articles