рд╣рдо "рд╣реЛрдо рдмрдЬрдЯ" рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рднрд╛рдЧ 1

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

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

рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, 10-14 рджрд┐рдиреЛрдВ рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 3-5 рджрд┐рдиреЛрдВ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдордВрдерди рдХреЗ рд▓рд┐рдП 1 рджрд┐рди рдФрд░ рдмрд╛рдХреА рдХреА рдпреЛрдЬрдирд╛, рдкрд░реАрдХреНрд╖рдг рдФрд░ рд▓реЗрдЦ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдПред

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

рдкрд╣рд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐: рдпреЛрдЬрдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд▓реЗрди-рджреЗрди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдо рд╕реЗ рдХрдо рдмреБрдирд┐рдпрд╛рджреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдПрдХ рдЫреЛрдЯрд╛ рдХрдЪрд░рд╛ рдмрд┐рди рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдмрди рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдХреЛрдИ рдЦреЛрд▓рдирд╛ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд (рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдзрд┐рдХ) рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рд▓реЗрди-рджреЗрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 100% рд╕рдорд╛рди рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд▓реЗрдЦ рдХреЛ рдмрд╣реБрдд рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХреЗ рдореЙрдбрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдореЗрдВ + - 10 рдорд┐рдирдЯ рд▓рдЧреЗрдВрдЧреЗред
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

рд╡рд┐рдХрд╛рд╕: рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛

рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдПрдХ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдг рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред SkyDrive рдкрд░ рд╕рднреА рд╕реНрд░реЛрдд ред рдЕрддреАрдд рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдЯреМрддреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рдПрдВрдЧреА ред

рдЖрд╡реЗрджрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЪрдпрди, рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдкреГрдердХреНрдХрд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ Entities рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, System.Data.Linq рдФрд░ Microsoft.Practices.Prism рдХреЛ References рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди ред

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

Transaction.cs
[Table(Name = "Transactions")] public class Transaction : NotificationObject 

Category.cs
 [Table(Name = "Categories")] public class Category : NotificationObject 

Database.cs
 public class Database : DataContext { private static string DBConnectionString = "Data Source=isostore:/Database.sdf"; public Database() : base(Database.DBConnectionString) { this.DeferredLoadingEnabled = true; } public Table<Bick.Budget.Entities.Categories.Category> Categories; public Table<Bick.Budget.Entities.Transactions.Transaction> Transactions; } 
рдбреЗрдЯрд╛рдмреЗрд╕ рдЧреБрдгреЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рди рд╕реЛрдЪреЗрдВ рдФрд░ рди рд╣реА рдлрд╝реАрд▓реНрдбред рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╢реИрд▓реАрдЧрдд рдЖрджрдд рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯреЗ рддрдХ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдЦрд┐рд░ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рд▓реЗрди-рджреЗрди рдФрд░ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ UI рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдЬрд╝реНрдо рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд NotificationObject рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреА рд╣реИрдВред рд╡реИрд╕реЗ, рд╣рдо рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ MVVM рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DefferedLoadingEnabled рдлреНрд▓реИрдЧ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ - рд╣рдо рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред
рд╣рдо рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

Transaction.cs рдкрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ :
 [Column(IsPrimaryKey = true)] public Guid ID { ... } ... private EntityRef<Categories.Category> category; [Association(Name = "FK_Transactions_Category", Storage = "category", ThisKey = "CategoryID", IsForeignKey = true)] public Categories.Category Category { get { return this.category.Entity; } set { Categories.Category previousValue = this.category.Entity; if (((previousValue != value) || (this.category.HasLoadedOrAssignedValue == false))) { if ((previousValue != null)) { this.category.Entity = null; previousValue.Transactions.Remove(this); } this.category.Entity = value; if ((value != null)) { if ((value.AddedTransactions == null) || (!value.AddedTransactions.Contains(this))) { value.Transactions.Add(this); } this.CategoryID = value.ID; } else { this.category = new EntityRef<Categories.Category>(); } this.RaisePropertyChanged(() => this.Category); } } } 
рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╣реИред рд╢реЗрд╖ рдХреЙрд▓рдо рднреА рдХреЙрд▓рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдк msdn рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛-рдЖрдзрд╛рд░рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рде рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА FK_Transactions_Category рдмрдирд╛рдпрд╛ рд╣реИред рдлреВрд▓рд╛ рд╣реБрдЖ рд╕реЗрдЯрд░ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдореВрд▓ рд╢реНрд░реЗрдгреА рдореЗрдВ рд▓реЗрди-рджреЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдореВрд▓ рд╢реНрд░реЗрдгреА рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдирдП рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓ - EF рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐ред рдмрджрд▓реЗ рдореЗрдВ рд╢реНрд░реЗрдгреА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

Category.cs :
 public EntitySet<Transactions.Transaction> Transactions { get { if (this.transactions == null) { this.transactions = new EntitySet<Transactions.Transaction>(); this.transactions.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(this.OnTransactionsChanged); } return this.transactions; } ... } ... private void OnTransactionsChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { this.AddedTransactions = e.NewItems; foreach (Transactions.Transaction t in e.NewItems) { t.Category = this; } this.AddedTransactions = null; this.RaisePropertyChanged(() => this.Transactions); } 
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рд╢реНрд░реЗрдгреА рд▓реЗрдирджреЗрди рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╢реНрд░реЗрдгреА рдореЗрдВ рд▓реЗрдирджреЗрди рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдзрд╛рд░ рддреИрдпрд╛рд░ рд╣реИред рд╕реНрдХрд╛рдИрдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕рдорд╛рдзрд╛рди ред

рд╡рд┐рдХрд╛рд╕: рдПрдХ рдпреВрдЖрдИ рдмрдирд╛рдПрдБ

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

рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕реНрдХреЗрдЪрдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмреНрд▓реЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдирд┐рд╢реБрд▓реНрдХ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ) рдФрд░ WP7 рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрдЪрдлреНрд▓реЛ рдЯреЗрдореНрдкрд▓реЗрдЯ (рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕)

рд╣рдо рдЗрди рд╕реНрдХреНрд░реАрди рдХреЛ рдирд┐рдореНрди рджреГрд╢реНрдп рдореЗрдВ рддреЛрдбрд╝реЗрдВрдЧреЗ: рдирдпрд╛ / рд╕рдВрдкрд╛рджрд┐рдд рд▓реЗрдирджреЗрди, рдирдИ / рд╕рдВрдкрд╛рджрд┐рдд рд╢реНрд░реЗрдгреА, рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рд╕реВрдЪреА, рд▓реЗрди-рджреЗрди рд╕реВрдЪреА, рдФрд░ рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХрд╛рдИрдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕рдорд╛рдзрд╛рди ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣рдо рдХреБрдЫ рднреА рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ - рд╣рдореЗрдВ рдмрд╕ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Database.cs рдореЗрдВ рдРрд╕рд╛ рд╕рдВрд╢реЛрдзрди рдХрд░реЗрдВрдЧреЗ:
 public Database(bool isReadOnly = false) : base(Database.DBConnectionString) { if (!this.DatabaseExists()) { this.CreateDatabase(); } this.DeferredLoadingEnabled = true; this.ObjectTrackingEnabled = !isReadOnly; } 
рдЗрд╕ рдкреНрд░рдХрд╛рд░, isReadOnly == рд╕рдЪ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБрдУрдВ рдХреА рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдФрд╕рддрди рд╕рд╛рдзрд╛рд░рдг рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдХреЛ 10 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИред

UI рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдЬрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА ApplicationBarButton (рд╣рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣реИред Prism.Interactions рдореЗрдВ DependencyProperty ApplicationBarButtonCommand рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ AppBarUtils рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
CategoriesView.xaml рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖рдг :
 <phone:PhoneApplicationPage xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:appbar="clr-namespace:AppBarUtils;assembly=AppBarUtils"> тАж <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="False" Mode="Default"> <shell:ApplicationBarIconButton IconUri="/icons/appbar.add.rest.png" Text="add new"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> <i:Interaction.Behaviors> <appbar:AppBarItemCommand Id="add new" Command="{Binding Path=AddCategoryCommand}"/> </i:Interaction.Behaviors> 
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдмрдЯрди рдХреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрдВрдЧреА рдФрд░ рд╣рдореЗрдВ рд╡реНрдпреВрдореЙрдбрд▓ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдкрд░рд┐рдЪрд┐рдд (рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдорд╡реАрд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛), рд╡рд┐рдзрд┐ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред рд╣рдо ApplicationController рдХреНрд▓рд╛рд╕ рдмрдирд╛рдХрд░ рдЕрдкрдиреЗ рдХреЙрдорди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдХреЗ рд╕рднреА рдХреЛ рдЬреНрдЮрд╛рдд рд╢реНрд░реЗрдгреА рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 public static class KnownPages { public const string AddCategory = "/Views/CategoryAddEditView.xaml?mode=Add"; public const string EditCategory = "/Views/CategoryAddEditView.xaml?mode=Edit&id={0}"; public const string ListCategories = "/Views/CategoriesView.xaml"; public const string CategoryDetails = "/Views/CategoryDetailsView.xaml?id={0}"; } 
, ApplicationController рд╕реЗ рдПрдХ NavigateTo () (рдореВрд▓ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
 public void NavigateTo(string url, params object[] data) { Uri address = new Uri(String.Format(url, data), UriKind.Relative); PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; root.Navigate(address); } 
рдЕрдм, рдЪреВрдВрдХрд┐ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЛрдб = AddEdit рдкреГрд╖реНрда рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ ViewModel рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдИрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ CodeBehind'e рдореЗрдВ OnNavigatedTo рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдФрд░ ViewModel рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдмрд╕ рдЧрдпрд╛ред
CategoryAddEditView.xaml.cs :
 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); ((CategoryAddEditViewModel)this.DataContext).OnNavigatedTo(this.NavigationContext, this.NavigationService.BackStack.First()); } 
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рди рдХреЗрд╡рд▓ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрджрд░реНрдн (рдЬрд╣рд╛рдВ рдпрд╣ рдкреГрд╖реНрда рдкрддреЗ рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ) рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕ рдкреГрд╖реНрда рдХреЛ рднреА рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╢реНрд░реЗрдгреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реА рд╣реИред рд╕рд╛рджрд╛ рджреГрд╢реНрдп рдФрд░ рд╕рд╛рджрд╛ рджреГрд╢реНрдпрдореЙрдбрд▓ред рд▓реЗрдХрд┐рди рджреЛ рд╣реИрдВ рд▓реЗрдХрд┐рдиред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдВрдкрд╛рджрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ рдПрдорд╡реА-рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрдЧрд╛), рдиреЗрд╡рд┐рдЧреЗрд╢рдирдХреЛрдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдпрд╣ рд╣реИ рдХрд┐ TextBox рдХреЗ рд▓рд┐рдП WP7 рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓рдирд╛ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрддреНрд╡ рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдореВрд▓ рддрд░реАрдХреЛрдВ рд╕реЗ, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рд┐рдЬреНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (CategoryAddEditView.xaml рдлрд╝рд╛рдЗрд▓):
 xmlns:prism="clr-namespace:Microsoft.Practices.Prism.Interactivity;assembly=Microsoft.Practices.Prism.Interactivity" ... <TextBox TextWrapping="Wrap" Text="{Binding Path=Category.Name, Mode=TwoWay}"> <i:Interaction.Behaviors> <prism:UpdateTextBindingOnPropertyChanged /> </i:Interaction.Behaviors> </TextBox> 
рдХрд┐рд╕реА рд╢реНрд░реЗрдгреА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
CategoryAddEditViewMode.cs
 public void SaveCategory() { if (!this.isEditMode) { this.model.AddCategory(this.Category); ApplicationController.Default.GoBack(); } } 
рдЖрдкрдХреЛ рдХрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдо рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рджреГрд╢реНрдп рдкреГрд╖реНрда рдкрд░ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдРрд╕реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреБрдж рдХреЛ рдПрдХ рдиреБрдХрд╕рд╛рди рдореЗрдВ рди рдкрд╛рдП, рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдмреИрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдореНрдореАрдж рдереАред
CategoryAddEditModel.cs рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдЪрдд рд╣реЛрддреА рд╣реИ:
 public void AddCategory(Category cat) { using (Database db = new Database()) { db.Categories.InsertOnSubmit(cat); db.SubmitChanges(); } } 
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЬрд╛рдБрдЪ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИ - рдФрд░ рдпрд╣ рдмреБрд░рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЦрддреНрдо рдХрд░рдирд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рд╣рдо рдмрд╛рдХреА рд▓реЗрдЦреЛрдВ рдХреЗ рдмреАрдЪ рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдЬрдм рдЖрдк рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ View рдФрд░ ViewModel рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╕реВрдЪреА рдкреГрд╖реНрда рд╕реЗ рдРрдб рдкреЗрдЬ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо IsReloadPending рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред
рд╢реНрд░реЗрдгрд┐рдпрд╛рдБрджреГрд╢реНрдпрдореЙрдбрд▓ :
 private void AddCategory() { this.isReloadPending = true; ApplicationController.Default.NavigateTo(KnownPages.AddCategory); } public void OnNavigatedTo(NavigationContext context, JournalEntry lastPage) { if (this.isReloadPending) { this.isReloadPending = false; this.Categories = this.model.GetCategoriesList(); } } 

рдкрд░рд┐рдгрд╛рдо
рдЖрдЬ рд╣рдореЗрдВ WP7 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдорд┐рд▓ рдЧрдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдордВрдЪ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЛ рд╕реАрдЦрдирд╛ред рд╣рдордиреЗ рдХреБрдЫ рдЬрд╛рдореЛрдВ (рдПрдкреНрд▓реАрдХреЗрд╢рдирдмрд╛рд░, рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕) рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдЫрд╛рдбрд╝ рджрд┐рдпрд╛ред
рд╣рд╛рдВ - рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ (рд╕рд┐рд░реНрдл рдПрдХ рдбреЗрдЯрд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ), рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 1-2 рдШрдВрдЯреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рдЦреБрдж рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВрдЧреЗред рд╕реНрдХрд╛рдИрдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕рдорд╛рдзрд╛рди ред

рд╕рд╛рде рд╣реА, C # рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Microsoft рдХрд╛ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЙрд╕реА рд╕рдордп, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдПрдХ рд╕рдорд╛рди рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдПрдХ рдбрд╛рдпрд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
рд╕рд╛рд╣рд┐рддреНрдп
  1. WP7 UI / UX рдиреЛрдЯреНрд╕
  2. рдбреЗрд╡рд▓рдкрд░ рдХреА рдЧрд╛рдЗрдб Microsoft рдкреНрд░рд┐рдЬреНрдо рдХреЗ рд▓рд┐рдП
  3. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб (LINQ to SQL)

Source: https://habr.com/ru/post/In138117/


All Articles