рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛

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

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╡рд░реНрдЧ рд╣реИ
public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  1. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  2. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  3. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  4. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  5. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
  6. public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .
public class Region { public string Name { get ; set ; } public int Index { get ; set ; } public IEnumerable <Region> SubRegions { get ; set ; } } * This source code was highlighted with Source Code Highlighter .

рдФрд░ рдпреВрдЖрдИ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рд╣реИ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдзреАрди рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдорд╡реАрд╡реАрдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдЕрдкрдирд╛ рдпреВрдЖрдИ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд░реАрдЬрди рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд░реАрдЬрдирд░рд╛рдЗрдЬреЗрд╢рди рдХреА рд╕рдм- рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рд╕рдВрдкрддреНрддрд┐ IEnumerable <RegionViewModel> рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд▓реМрдЯрд╛рддреА рд╣реИ , рддреЛ рд╕рднреА UI рдХреЛрдб рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЛрдбрд▓ рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЯреНрд░реАрд╡реНрдпреВ рдЯреНрд░реАрд╡реНрдпреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╕рднреА рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Isselected property true рд╣реИ ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЙрдбрд▓ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рд░реАрдЬрди рдХреНрд▓рд╛рд╕ рдХреЛ рдбреЗрдЯрд╛ рдлреЙрд░рд╡рд░реНрдб рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╡рд╣ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдЬреАрд╡рди:
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЙрдбрд▓
  2. {
  3. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рдорд╛рди { рдорд┐рд▓рддрд╛ рд╣реИ ; рд╕реЗрдЯ ; }
  4. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <RegionViewModel> рдЙрдк-рдирд┐рдпрдо {{{*...*/}} рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  5. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди


рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░реЙрдХреНрд╕реА рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ INotifyPropertyChanged , рдпрд╛ / рдФрд░ рдирдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдЖрджрд┐ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред .Net рд╕реНрдЯреИрдХ рд╣рдореЗрдВ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдФрд░ рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ TryInvokeMember , TrySetMember рдФрд░ TryGetMember рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдмреВрд▓ TryInvokeMember (InvokeMemberBinder рдмрд╛рдЗрдВрдбрд░, рдСрдмреНрдЬреЗрдХреНрдЯ [] рдЖрд░реНрдЧреНрд╕, рдЖрдЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд┐рдгрд╛рдо)
  2. {
  3. рдкрд░рд┐рдгрд╛рдо = _methods.ContainsKey (binder.Name)? _methods [binder.Name]ред рдбрд╛рдпрдирд╛рдорд┐рдХ рдЗрдирд╡реЛрдХ ( рдирдпрд╛ [] { рдпрд╣ } .Concat (args) .ToArray ()): InvokeNativeMethod (binder .Name, args);
  4. рдкрд░рд┐рдгрд╛рдо = GetResult (рдкрд░рд┐рдгрд╛рдо);
  5. рд╕рдЪ рд▓реМрдЯрдирд╛ ;
  6. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

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

рдЧреБрдг рдЬреЛрдбрд╝рдирд╛


  1. рдирд┐рдЬреА рд╡рд░реНрдЧ MyClass
  2. {
  3. рдорд╛рдпрдХреНрд▓рд╛рд╕ _i;
  4. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ MyClass рдлреВ ()
  6. {
  7. рд╡рд╛рдкрд╕реА _i ?? (_i = рдирдпрд╛ MyClass {Name = "_sdfdsfsdfsfd" });
  8. }
  9. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <MyClass> GetChilds ()
  10. {
  11. рдкреИрджрд╛рд╡рд╛рд░ рдирдИ MyClass ();
  12. рдкреИрджрд╛рд╡рд╛рд░ рдирдИ MyClass ();
  13. }
  14. }
  15. [TestMethod]
  16. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп TestAddProperties ()
  17. {
  18. var a = рдирдпрд╛ MyClass {Name = "123" };
  19. Assert.AreEqual ( "123" , a.Name);
  20. рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдирд╛рдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдП)ред рдПрдбрдкреНрд░реЛрдкрд░реЗрдЯреА < рдмреВрд▓ > ( " рдЗрд╕реНрд╕реЗрдбреЗрдб " )
  21. .AddProperty ( "X" , _ => x, (_, рдорд╛рди ) => x = рдорд╛рди )
  22. .AddProperty ( "рдЕрдВрддрд┐рдо рдирд╛рдо" , "FFFF" )
  23. рдЫрдВрдж.рдирд╛рдо = "567" ;
  24. рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рд╕рддреНрдп ;
  25. рдЫрдВрдж .X = 42;
  26. Assert.AreEqual ( "567" , a.Name);
  27. Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
  28. Assert.AreEqual (42, x);
  29. рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рдЕрд╕рддреНрдп ;
  30. Assert.IsFalse (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
  31. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдкреНрд░реЙрдХреНрд╕ рдмрдирд╛рдПрдБ


  1. [TestMethod]
  2. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЯреЗрд╕реНрдЯрдЪрд╛рдЗрд▓реНрдб ()
  3. {
  4. var a = рдирдпрд╛ MyClass {Name = "123" };
  5. Assert.AreEqual ( "123" , a.Name);
  6. Assert.AreEqual ( "_sdfdsfsdfsfd" , a.Foo () рдирд╛рдо);
  7. var x = 0;
  8. рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдирд╛рдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдП)ред рдПрдбрдкреНрд░реЛрдкрд░реЗрдЯреА < рдмреВрд▓ > ( " рдЗрд╕реНрд╕реЗрдбреЗрдб " )
  9. .AddProperty ( "X" , _ => x, (_, рдорд╛рди ) => x = рдорд╛рди )
  10. .AddProperty ( "рдЕрдВрддрд┐рдо рдирд╛рдо" , "FFFF" )
  11. .AddMethod ( "рдмреВ" , рдирдпрд╛ рдлрдВрдХ <рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА <MyClass>, int , string > (m, i) => ((MyClass) m) .Name + i.ToString ());
  12. рдЫрдВрдж.рдирд╛рдо = "567" ;
  13. рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рд╕рддреНрдп ;
  14. рдЫрдВрдж .X = 42;
  15. var b =xy.Foo ();
  16. b.sSlectlected = true ;
  17. Assert.AreEqual ( "567" , a.Name);
  18. Assert.AreEqual ( "5674" , рдЫрджреНрдо.рднреВ (4));
  19. Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
  20. Assert.AreEqual (42, x);
  21. Assert.IsTrue (b.IsSlectlected);
  22. b.IsSlectlected = false ;
  23. Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
  24. Assert.IsFalse (b.IsSelected);
  25. рдкреНрд░реЙрдХреНрд╕реА.рд▓рд╛рд╕реНрдЯрдиреЗрдо = "890" ;
  26. var d =xy.Foo ();
  27. Assert.AreEqual ( "FFFF" , d.LastName);
  28. var d2 =xy.Foo ();
  29. d2.LastName = " RRRRR " ;
  30. Assert.AreEqual ( "567" , рдлреВ (рдкреНрд░реЙрдХреНрд╕реА));
  31. Assert.AreEqual (d.LastName, d2.LastName);
  32. // рдЖрдк рдПрдХ рдирд┐рд░реНрджреЛрд╖ рдЬрд╛рддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░реЛрд╡рд╛рди рдХреЛ рд▓реВрдЯ рд╕рдХрддреЗ рд╣реИрдВ
  33. var c = (MyClass) рдкреНрд░реЙрдХреНрд╕реА;
  34. Assert.AreEqual ( "567" , c.Name);
  35. foreach (рдЫрджреНрдо рдореЗрдВ var рдмрдЪреНрдЪрд╛ ред GetChilds ())
  36. {
  37. рдмрдЪреНрдЪрд╛ред рд╕реБрдирд┐рдпреЛрдЬрд┐рдд = рд╕рдЪреНрдЪрд╛ ;
  38. Assert.IsTrue (child.sSelected);
  39. }
  40. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

INotifyPropertyChanged рдХрд╛ рд╕реНрд╡рдд: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  1. [TestMethod]
  2. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп TestPropertyChange ()
  3. {
  4. var myClass = new MyClass ();
  5. var рдЧреБрдгрдирд╛рдо = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА;
  6. рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕рд┐ред рдХреНрд░рд┐рдПрдЯ (myClass);
  7. ((INotifyPropertyChanged) рдкреНрд░реЙрдХреНрд╕реА) .PropertyChanged + = (s), a = = propertyName = a.PropertyName;
  8. рдЫрдВрдж.рдирд╛рдо = " рдЖрдЖрдЖ " ;
  9. Assert.AreEqual ( "рдирд╛рдо" , рд╕рдВрдкрддреНрддрд┐рдирд╛рдо);
  10. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ


рдЖрдЗрдП рдЗрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЪрдпрдирд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рджрд┐рдЦрд╛рдПрдВред рджрд░рдЕрд╕рд▓, рд╡рд┐рдВрдбреЛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ MainWindow ()
  2. {
  3. рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдХрдореНрдкреЛрдиреЗрдВрдЯ ();
  4. DataContext = рдпрд╣ ;
  5. рдЖрдЗрдЯрдо = рдирдпрд╛ [] {рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдХреНрд░рд┐рдПрдЯреЗрдЬ ()ред рдлрд░реНрд╕реНрдЯ ())ред AddProperty < bool > ( "IsSelected" )};
  6. }
  7. IEnumerable <рдХреНрд╖реЗрддреНрд░> GetSelectedItems ( IEnumerable <рдЧрддрд┐рд╢реАрд▓> рдЖрдЗрдЯрдо)
  8. {
  9. рд╡рд╛рдкрд╕реА рдЖрдЗрдЯрдоред рдХрд╣реАрдВ рднреА (x => x.IsSelected) .Concat (рдЖрдЗрдЯрдореНрд╕ред SelectMany (x => GetSelectedItems (( IEnumerable <рдЧрддрд┐рд╢реАрд▓>)) x.SubRegions)) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (x => (рдХреНрд╖реЗрддреНрд░) x);
  10. }
  11. рдирд┐рдЬреА рд╢реВрдиреНрдп рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ( рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e)
  12. {
  13. var res = GetSelectedItems (рдЖрдЗрдЯрдо) .Take (10) .ToList ();
  14. рдЪреБрдирд╛ рд╣реБрдЖ = Res;
  15. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдФрд░ рдЙрд╕реЗ xaml
  1. < рд╡рд┐рдВрдбреЛ x: рдХреНрд▓рд╛рд╕ = "WpfApplication1.MainWindow"
  2. xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/pretation"
  3. xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns: WpfApplication1 = "clr-namespace: WpfApplication1"
  4. рд╢реАрд░реНрд╖рдХ = "рдореЗрдирд╡рд┐рдВрдбреЛ" рдКрдБрдЪрд╛рдИ = "350" рдЪреМрдбрд╝рд╛рдИ = "525" >
  5. < Windowред рд╕реНрд░реЛрдд >
  6. < DataTemplate DataType = "{x: рдЯрд╛рдЗрдк рдХрд░реЗрдВ WpfApplication1: рдХреНрд╖реЗрддреНрд░}" >
  7. < WrapPanel >
  8. < TextBlock рдЯреЗрдХреНрд╕реНрдЯ = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдирд╛рдо, StringFormat = '{} {0},'}" >
  9. < TextBlock рдЯреЗрдХреНрд╕реНрдЯ = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдЗрдВрдбреЗрдХреНрд╕}" />
  10. </ WrapPanel >
  11. </ DataTemplate >
  12. </ Window.Resources >
  13. < рдЧреНрд░рд┐рдб >
  14. < Grid.ColumnDefinitions >
  15. < ColumnDefinition Width = "*" />
  16. < ColumnDefinition Width = "рдСрдЯреЛ" />
  17. < ColumnDefinition Width = "*" />
  18. </ Grid.ColumnDefinitions >
  19. < рдЯреНрд░реА рд╡реНрдпреВ рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "0" рдЖрдЗрдЯрдореНрд╕ рд╕реЛрд░реНрд╕ = " {рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЖрдЗрдЯрдо}" рдмреЙрд░реНрдбрд░рд╣реИрдХрд┐рдиреЗрд╕ = "0" >
  20. < TreeView.ItemTemplate >
  21. < HierarchicalDataTemplate ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рдмрдЧреНрд░реЗрд╢рди}" >
  22. < CheckBox IsChecked = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ IsSelected, Mode = TwoWay}" рд╕рд╛рдордЧреНрд░реА = "{рдмрд╛рдзреНрдпрдХрд╛рд░реА рдорд╛рди}" />
  23. </ HierarchicalDataTemplate >
  24. </ TreeView.ItemTemplate >
  25. </ рдЯреНрд░реА рд╡реНрдпреВ >
  26. < рдмрдЯрди рд╕рд╛рдордЧреНрд░реА = "рдЪрдпрдирд┐рдд рдЪрдпрдирд┐рдд" рд╡рд░реНрдЯрд┐рдХрд▓ рдСрд▓рдореЗрдВрдЯ = "рдХреЗрдВрджреНрд░" рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "1" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ " />
  27. < рд╕реВрдЪреА рдмреЙрдХреНрд╕ рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "2" рдЖрдЗрдЯрдореНрд╕ рд╕реЛрд░реНрд╕ = " {рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗрд▓реЗрдХреНрдЯреАрдореНрд╕ }" рдмреЙрд░реНрдбрд░рдЯреАрдХреЗрдиреЗрд╕ = "0" />
  28. </ рдЧреНрд░рд┐рдб >
  29. </ Window >
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


рдЫрд╡рд┐

рд╕рдВрджрд░реНрдн


  1. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реВрддреНрд░
  2. рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝
  3. DynamicObject
  4. MVVM
  5. рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles