рдЬрд╝рдореАрд░рд┐рди 2.0 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд┐рд╕реА рддрд░рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рднреА рдЕрджреНрднреБрдд рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╝рдорд░реАрди рдХреНрдпрд╛ рд╣реИ?
Xamarin рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЛрдиреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрддреНрдкрд╛рдж рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП C # рднрд╛рд╖рд╛ рд╕рд╣рд┐рдд .Net рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЦреНрдп рдЧреБрдг:
- Android, iOs рдФрд░ Windows8 рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП C #ред LINQ рдФрд░ async / рдХрд╛рд░реНрдп рд╕рдорд░реНрдерди
- рдиреЗрдЯрд┐рд╡ рдпреВрдЖрдИ, рдиреЗрдЯрд┐рд╡ рдкреЗрдлреЙрд░реНрдореЗрдВрд╕ - рдХреЛрдб рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рджреЗрд╢реА UI рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕, рдЬрд┐рд╕рдореЗрдВ рд░реЗрд╕реНрдкрд░рд░, рдПрдирдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ...
- рдЬрд╝рд╛рдорд░реАрди рд╕реНрдЯреВрдбрд┐рдпреЛ, рдЬреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдХ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ
- .Net рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- C # рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдЕрдиреНрдп рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рджреЗрд╢реА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- Android рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХ рд╕рдВрдкрд╛рджрдХ

MvvmCross
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЙрди MVVM рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдлрд┐рд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рддреЗ рд╣реИрдВ:
рдореЙрдбрд▓-рджреЗрдЦреЗрдВ-ViewModel рдЯреЗрдореНрдкрд▓реЗрдЯMVVM рдкреИрдЯрд░реНрди рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдореЙрдбрд▓, рд╢рд╛рд╕реНрддреНрд░реАрдп MVC рдХреА рддрд░рд╣, рдореЙрдбрд▓ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореВрд▓рднреВрдд рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рджреГрд╢реНрдп рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рдВрдбреЛ, рдмрдЯрди рдЖрджрд┐ рд╣реИред рджреГрд╢реНрдп рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдпрд╛ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╣реИред рдпрджрд┐ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓реА рдЧрдИ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреГрд╢реНрдп, рдмрджрд▓реЗ рдореЗрдВ, рджреГрд╢реНрдп рдореЙрдбрд▓ рд╕реЗ рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреГрд╢реНрдп рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХрдорд╛рдВрдб рдХреЛ рджреЗрдЦреЗрдВред
рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ (ViewModel, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдореЙрдбрд▓ рдСрдл рд╡реНрдпреВ" [1]) рдПрдХ рддрд░рдл, рд╡реНрдпреВ рдХрд╛ рдПрдХ рдЕрдореВрд░реНрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл, рдореЙрдбрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╡реЗ рдХрдорд╛рдВрдб рднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдПрдорд╡реАрдПрдордХреНрд░реЙрд╕ рд╣реИред рдЗрд╕рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдФрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рд╡рд╛рд▓ рдХрд╛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯрд┐рдк рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реА рдЙрджрд╛рд░рддрд╛ рдФрд░ рдмрд┐рд▓ рдХреА рд░рд╛рд╢рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд╣ рдЙрд╕ рдЯрд┐рдк рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдкрдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдФрд░ Xamarin рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрджрдо рдЦреБрдж рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдореЛрдиреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛, рдПрдбреАрдЯреА, рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
- рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ 'рдХреЛрд░' рд╣реЛрдЧрд╛, рдЬреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ: рд╡реНрдпреВ рдореЙрдбрд▓, рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░, рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рджрд┐рдирд╛рдВрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрджрд┐ред
- рдкреНрд░рддреНрдпреЗрдХ рдордВрдЪ рдХреЗ рд▓рд┐рдП рдпреВрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ред рдпрд╣ рдХреЛрдб рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реА #, рд╡рд┐рдВрдбреЛрдЬ, рдкреЛрд░реНрдЯреЗрдмрд▓ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдиреЗрдВред
рд╣рдо TipCalc.Core рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ TipCalc рд╕рдорд╛рдзрд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7.5 рдФрд░ рдЙрдЪреНрдЪрддрд░ред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг .Net 4.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрд╕ рдорд╣реАрдиреЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
Class1.cs рдХреЛ рд╣рдЯрд╛рдПрдВ, рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
Nuvet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MvvmCross рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рд╣реЙрдЯ рдЯреВрдирд╛ рд╕реНрдЯрд╛рд░реНрдЯ рдкреИрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдиреНрдпреВрдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдХрдо рд╕реЗ рдХрдо 2.5
рдПрдХ рд╕рдлрд▓ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЛ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рджреЗрдЦреЗрдВрдЧреЗ: App.cs, рдЬрд┐рд╕рдореЗрдВ MvvmCross рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ ViewModels рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ FirstViewModel.cs рдлрд╝рд╛рдЗрд▓ред рдЙрдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ FirstViewModel рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ TipViewModel рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред
FirstViewModel рд╡рд░реНрдЧ MvxViewModel рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдпрд╣ MvvmCross рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдпреВрдЖрдИ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ INotifyPropertyChanged рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ WPF рдореЗрдВ рдЗрд╕рдХреА рд╕рд╛рджреГрд╢реНрдп BaseViewModel рд╣реИред
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ 3 рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ: рд╕рдмрдЯреЛрдЯрд▓ (рдЪрд╛рд▓рд╛рди рд░рд╛рд╢рд┐), рдЙрджрд╛рд░рддрд╛ (рдЙрджрд╛рд░рддрд╛) рдФрд░ рдЯрд┐рдк (рдЯрд┐рдк рд╣рдо рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ)ред рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдпреБрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдкреБрдирд░реНрдЧрдгрдирд╛:
рдкреВрд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдХреЛрдбusing Cirrious.MvvmCross.ViewModels; namespace TipCalc.Core.ViewModels { public class FirstViewModel : MvxViewModel { public FirstViewModel() { } public override void Start() { _subTotal = 100; _generosity = 10; Recalcuate(); base.Start(); } private double _subTotal; public double SubTotal { get { return _subTotal; } set { _subTotal = value; RaisePropertyChanged(() => SubTotal); Recalcuate(); } } private int _generosity; public int Generosity { get { return _generosity; } set { _generosity = value; RaisePropertyChanged(() => Generosity); Recalcuate(); } } private double _tip; public double Tip { get { return _tip; } set { _tip = value; RaisePropertyChanged(() => Tip);} } private void Recalcuate() { Tip = SubTotal * ((double)Generosity) / 100.0; } } }
рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЪреАрдпрд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, 'рдХреЛрд░' рд▓рд╛рдЗрдмреНрд░реЗрд░реА рддреИрдпрд╛рд░ рд╣реИред
Android рдкрд░ рдЧреНрд░рд╛рд╣рдХ
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЗрд╡ рд╕реНрдХреНрд░реАрди / рдлреЛрди / рдЯреИрдмрд▓реЗрдЯ рдкрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдЙрд╕рдХрд╛ рд╕реНрдХреЗрдЪ рджрд┐рдЦреЗрдЧрд╛:

рдПрдХ рд╣реА рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдВрдбреНрд░реЙрдЗрдб -> рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдЧрд╛ред рдЪрд▓рд┐рдП рдЗрд╕реЗ рдЯрд┐рдкреНрдХрд╛рд▓ рдЗрддреНрдпрд╛рджрд┐ рдХрд╣рддреЗ рд╣реИрдВ
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВрдЧреЗ:
Project1.cs рдФрд░ Main.axml рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВред
рд╣рдо рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, NuGet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЙрд╕реА MvvmCross рдкреИрдХреЗрдЬ - рд╣реЙрдЯ рдЯреВрдирд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреИрдХред рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рджреЗрдЦреЗрдВрдЧреЗ:
- SplashScreen.cs - рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐
- Setup.cs - MvvmCross рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ 'рдХреЛрд░' рд╕реЗ рдЬреЛрдбрд╝рдирд╛
- FirstView.cs - рд╣рдорд╛рд░реЗ FirstViewModel рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╡рд┐рдзрд┐
- FirstView.axml - рдФрд░ рдЗрд╕рдХрд╛ рд▓реЗрдЖрдЙрдЯ
рд╕рдВрджрд░реНрдн рдореЗрдВ TipCalc.Core.csproj рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ
рдЕрдм рд╣рдо рдЦреБрдж рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдПрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, FirstView.axml рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдПрдбрд┐рдЯрд░ рдпрд╛ xml рдПрдбрд┐рдЯрд░ рдореЗрдВ рдПрдбрд┐рдЯ рдХрд░реЗрдВред рд╣рдо рд╡рд╣рд╛рдБ LinearLayout, TextView, EditText, SeekBar рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
MvxBind рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЕрдкрдиреЗ ViewModel рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдЧреБрдг рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рдпрд╣ рдЗрд╕ рдЪрд┐рддреНрд░ рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдпрджрд┐ рд╣рдо рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
FirstView.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:local="http://schemas.android.com/apk/res/TipCalc.UI.Droid" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="SubTotal" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" local:MvxBind="Text SubTotal" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Generosity" /> <SeekBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="40" local:MvxBind="Progress Generosity" /> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#ffff00" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Tip to leave" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" local:MvxBind="Text Tip" /> </LinearLayout>
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдмрдВрдзрди рдирд┐рдпрдВрддреНрд░рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред TextView рддрддреНрд╡ рдХреА рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд▓рд╛рдЗрди рд▓реЛрдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ FirstViewModel рдХреНрд▓рд╛рд╕ рдХреА рдЯрд┐рдк рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде (рдЯреВ-рд╡реЗ) рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ: рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдВрджрд░ MvxBind = "рдЯреЗрдХреНрд╕реНрдЯ рдЯрд┐рдк"ред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, axml рдлрд╝рд╛рдЗрд▓ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИред
рд╣рдо рдмрдЪрд╛рддреЗ рд╣реИрдВ, рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рд╡реЛрдЗрд▓рд╛, рд╣рдо рдмрд┐рд▓ рдХреА рд░рд╛рд╢рд┐ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рд╣рдорд╛рд░реА рдЙрджрд╛рд░рддрд╛ рдФрд░ рдЧреНрд░реЗрдЪреНрдпреБрдЯреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо
- рд╣рдордиреЗ рдЬрд╝рд╛рдорд░реАрди рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛
- рд╣рдордиреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ
- рд╣рдордиреЗ рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ MvvmCross рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди Mvvm рд╢рд╛рдВрдд рд╣реИ)
рд╣рдореЗрдВ рдХреНрдпрд╛ рдпрд╛рдж рдЖрдпрд╛?
- рдЬрд╝рд╛рдорд░реАрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ
- Mvvm рдХреНрдпрд╛ рд╣реИ, рдЗрд╕реЗ MvvmCross рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ
- рд╣рдордиреЗ iOs рдФрд░ Windows8 рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рдП
- рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
XamarinрдПрдорд╡реАрдПрдордХреНрд░реЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдорд╡реАрдПрдордХреНрд░реЙрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓MvvmCross рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╡реАрдбрд┐рдпреЛ