рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдпреВрдЖрдИ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ / рдпрд╛ рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдпрд╣ рдЖрдпрд╛ рдерд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╡рд░реНрдЧ рд╣реИ
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 .
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 .
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 .
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 рд╣реИ ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐
рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЙрдбрд▓ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб
рд░реАрдЬрди рдХреНрд▓рд╛рд╕ рдХреЛ рдбреЗрдЯрд╛
рдлреЙрд░рд╡рд░реНрдб рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╡рд╣ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдЬреАрд╡рди:
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рд░реАрдЬрдирд▓ рд╡реНрдпреВрдореЙрдбрд▓
- {
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рдорд╛рди { рдорд┐рд▓рддрд╛ рд╣реИ ; рд╕реЗрдЯ ; }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <RegionViewModel> рдЙрдк-рдирд┐рдпрдо {{{*...*/}} рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ
рд╕рдмрд░реЗрдЬ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐
рдХреНрд╖реЗрддреНрд░ INotifyPropertyChanged рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреЗ
рд╕реНрд╡рдпрдВ рдХреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдп рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рд▓рд┐рдЦрдирд╛ рдЖрдкрдХреЛ рдердХрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХрд╛ рдкреНрд░рд╢реНрди рдкреВрдЫрд╛ рдФрд░ рдпрд╣реА рд╣реБрдЖред
рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди
рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░реЙрдХреНрд╕реА рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
INotifyPropertyChanged , рдпрд╛ / рдФрд░ рдирдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдЖрджрд┐ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред .Net рд╕реНрдЯреИрдХ рд╣рдореЗрдВ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдореИрдВрдиреЗ 5 рд╡рд╛рдВ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐
RealProxy рдХреЛ рдореЙрдбрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдорд╣рд▓ рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЗрд╡рд▓ рд╡рд░реНрдЧ рдХреЗ рдЖрднрд╛рд╕реА рд╕рджрд╕реНрдпреЛрдВ, рдкреЛрд╕реНрдЯ-рд╢рд╛рд░реНрдк рдХреЙрд╕реНрдЯ рдордиреА, рдФрд░ рдореБрдЭреЗ рдзрд╛рд░реНрдорд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдмрдирд╛рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбрд╛рдпрдиреЗрдорд┐рдХрдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░
TryInvokeMember ,
TrySetMember рдФрд░
TryGetMember рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб
рдХрд░рддрд╛ рд╣реИ ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдмреВрд▓ TryInvokeMember (InvokeMemberBinder рдмрд╛рдЗрдВрдбрд░, рдСрдмреНрдЬреЗрдХреНрдЯ [] рдЖрд░реНрдЧреНрд╕, рдЖрдЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд┐рдгрд╛рдо)
- {
- рдкрд░рд┐рдгрд╛рдо = _methods.ContainsKey (binder.Name)? _methods [binder.Name]ред рдбрд╛рдпрдирд╛рдорд┐рдХ рдЗрдирд╡реЛрдХ ( рдирдпрд╛ [] { рдпрд╣ } .Concat (args) .ToArray ()): InvokeNativeMethod (binder .Name, args);
- рдкрд░рд┐рдгрд╛рдо = GetResult (рдкрд░рд┐рдгрд╛рдо);
- рд╕рдЪ рд▓реМрдЯрдирд╛ ;
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдорд╛рдорд▓реЗ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдЗрдирдкреБрдЯ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдХрдХреНрд╖рд╛ рдХреЗ рдХреБрдЫ рд╕рджрд╕реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдирдП рддрд░реАрдХреЛрдВ рдФрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдлреНрд▓реБрдПрдВрдЯ рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рд╕ рдХреЛрдб рд╕реНрд╡рдпрдВ рдХрд╛рдлреА рдмрдбрд╝рд╛ (рд▓рдЧрднрдЧ 280 рд▓рд╛рдЗрдиреЗрдВ) рдирд┐рдХрд▓рд╛, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдкреЛрд╕реНрдЯ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдВрдХ рд╕реЗ рд╕реНрд░реЛрдд рдФрд░ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдЧреБрдг рдЬреЛрдбрд╝рдирд╛
- рдирд┐рдЬреА рд╡рд░реНрдЧ MyClass
- {
- рдорд╛рдпрдХреНрд▓рд╛рд╕ _i;
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ MyClass рдлреВ ()
- {
- рд╡рд╛рдкрд╕реА _i ?? (_i = рдирдпрд╛ MyClass {Name = "_sdfdsfsdfsfd" });
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <MyClass> GetChilds ()
- {
- рдкреИрджрд╛рд╡рд╛рд░ рдирдИ MyClass ();
- рдкреИрджрд╛рд╡рд╛рд░ рдирдИ MyClass ();
- }
- }
- [TestMethod]
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп TestAddProperties ()
- {
- var a = рдирдпрд╛ MyClass {Name = "123" };
- Assert.AreEqual ( "123" , a.Name);
- рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдирд╛рдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдП)ред рдПрдбрдкреНрд░реЛрдкрд░реЗрдЯреА < рдмреВрд▓ > ( " рдЗрд╕реНрд╕реЗрдбреЗрдб " )
- .AddProperty ( "X" , _ => x, (_, рдорд╛рди ) => x = рдорд╛рди )
- .AddProperty ( "рдЕрдВрддрд┐рдо рдирд╛рдо" , "FFFF" )
- рдЫрдВрдж.рдирд╛рдо = "567" ;
- рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рд╕рддреНрдп ;
- рдЫрдВрдж .X = 42;
- Assert.AreEqual ( "567" , a.Name);
- Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
- Assert.AreEqual (42, x);
- рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рдЕрд╕рддреНрдп ;
- Assert.IsFalse (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдкреНрд░реЙрдХреНрд╕ рдмрдирд╛рдПрдБ
- [TestMethod]
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЯреЗрд╕реНрдЯрдЪрд╛рдЗрд▓реНрдб ()
- {
- var a = рдирдпрд╛ MyClass {Name = "123" };
- Assert.AreEqual ( "123" , a.Name);
- Assert.AreEqual ( "_sdfdsfsdfsfd" , a.Foo () рдирд╛рдо);
- var x = 0;
- рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдирд╛рдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдП)ред рдПрдбрдкреНрд░реЛрдкрд░реЗрдЯреА < рдмреВрд▓ > ( " рдЗрд╕реНрд╕реЗрдбреЗрдб " )
- .AddProperty ( "X" , _ => x, (_, рдорд╛рди ) => x = рдорд╛рди )
- .AddProperty ( "рдЕрдВрддрд┐рдо рдирд╛рдо" , "FFFF" )
- .AddMethod ( "рдмреВ" , рдирдпрд╛ рдлрдВрдХ <рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА <MyClass>, int , string > (m, i) => ((MyClass) m) .Name + i.ToString ());
- рдЫрдВрдж.рдирд╛рдо = "567" ;
- рдЫрдВрдж.рд╕рдВрд╢реЛрдзрд┐рдд = рд╕рддреНрдп ;
- рдЫрдВрдж .X = 42;
- var b =xy.Foo ();
- b.sSlectlected = true ;
- Assert.AreEqual ( "567" , a.Name);
- Assert.AreEqual ( "5674" , рдЫрджреНрдо.рднреВ (4));
- Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
- Assert.AreEqual (42, x);
- Assert.IsTrue (b.IsSlectlected);
- b.IsSlectlected = false ;
- Assert.IsTrue (рдЫрджреНрдо.рдЖрдзрд╛рд░рд┐рдд);
- Assert.IsFalse (b.IsSelected);
- рдкреНрд░реЙрдХреНрд╕реА.рд▓рд╛рд╕реНрдЯрдиреЗрдо = "890" ;
- var d =xy.Foo ();
- Assert.AreEqual ( "FFFF" , d.LastName);
- var d2 =xy.Foo ();
- d2.LastName = " RRRRR " ;
- Assert.AreEqual ( "567" , рдлреВ (рдкреНрд░реЙрдХреНрд╕реА));
- Assert.AreEqual (d.LastName, d2.LastName);
- // рдЖрдк рдПрдХ рдирд┐рд░реНрджреЛрд╖ рдЬрд╛рддрд┐ рдмрдирд╛рдиреЗ рдХреЗ
рд▓рд┐рдП рдХреЛрд░реЛрд╡рд╛рди рдХреЛ рд▓реВрдЯ рд╕рдХрддреЗ рд╣реИрдВ - var c = (MyClass) рдкреНрд░реЙрдХреНрд╕реА;
- Assert.AreEqual ( "567" , c.Name);
- foreach (рдЫрджреНрдо рдореЗрдВ var рдмрдЪреНрдЪрд╛ ред GetChilds ())
- {
- рдмрдЪреНрдЪрд╛ред рд╕реБрдирд┐рдпреЛрдЬрд┐рдд = рд╕рдЪреНрдЪрд╛ ;
- Assert.IsTrue (child.sSelected);
- }
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
INotifyPropertyChanged рдХрд╛ рд╕реНрд╡рдд: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд┐рдпрд╛
рдЧрдпрд╛ рдерд╛ред
- [TestMethod]
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп TestPropertyChange ()
- {
- var myClass = new MyClass ();
- var рдЧреБрдгрдирд╛рдо = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА;
- рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА = рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕рд┐ред рдХреНрд░рд┐рдПрдЯ (myClass);
- ((INotifyPropertyChanged) рдкреНрд░реЙрдХреНрд╕реА) .PropertyChanged + = (s), a = = propertyName = a.PropertyName;
- рдЫрдВрдж.рдирд╛рдо = " рдЖрдЖрдЖ " ;
- Assert.AreEqual ( "рдирд╛рдо" , рд╕рдВрдкрддреНрддрд┐рдирд╛рдо);
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рдЖрдЗрдП рдЗрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЪрдпрдирд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рджрд┐рдЦрд╛рдПрдВред рджрд░рдЕрд╕рд▓, рд╡рд┐рдВрдбреЛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ MainWindow ()
- {
- рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдХрдореНрдкреЛрдиреЗрдВрдЯ ();
- DataContext = рдпрд╣ ;
- рдЖрдЗрдЯрдо = рдирдпрд╛ [] {рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЙрдХреНрд╕реА.рдХреНрд░рд┐рдПрдЯ (рдХреНрд░рд┐рдПрдЯреЗрдЬ ()ред рдлрд░реНрд╕реНрдЯ ())ред AddProperty < bool > ( "IsSelected" )};
- }
- IEnumerable <рдХреНрд╖реЗрддреНрд░> GetSelectedItems ( IEnumerable <рдЧрддрд┐рд╢реАрд▓> рдЖрдЗрдЯрдо)
- {
- рд╡рд╛рдкрд╕реА рдЖрдЗрдЯрдоред рдХрд╣реАрдВ рднреА (x => x.IsSelected) .Concat (рдЖрдЗрдЯрдореНрд╕ред SelectMany (x => GetSelectedItems (( IEnumerable <рдЧрддрд┐рд╢реАрд▓>)) x.SubRegions)) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (x => (рдХреНрд╖реЗрддреНрд░) x);
- }
- рдирд┐рдЬреА рд╢реВрдиреНрдп рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ( рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, RoutedEventArgs e)
- {
- var res = GetSelectedItems (рдЖрдЗрдЯрдо) .Take (10) .ToList ();
- рдЪреБрдирд╛ рд╣реБрдЖ = Res;
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рдЙрд╕реЗ xaml
- < рд╡рд┐рдВрдбреЛ x: рдХреНрд▓рд╛рд╕ = "WpfApplication1.MainWindow"
- xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/pretation"
- xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns: WpfApplication1 = "clr-namespace: WpfApplication1"
- рд╢реАрд░реНрд╖рдХ = "рдореЗрдирд╡рд┐рдВрдбреЛ" рдКрдБрдЪрд╛рдИ = "350" рдЪреМрдбрд╝рд╛рдИ = "525" >
- < Windowред рд╕реНрд░реЛрдд >
- < DataTemplate DataType = "{x: рдЯрд╛рдЗрдк рдХрд░реЗрдВ WpfApplication1: рдХреНрд╖реЗрддреНрд░}" >
- < WrapPanel >
- < TextBlock рдЯреЗрдХреНрд╕реНрдЯ = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдирд╛рдо, StringFormat = '{} {0},'}" >
- < TextBlock рдЯреЗрдХреНрд╕реНрдЯ = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдЗрдВрдбреЗрдХреНрд╕}" />
- </ WrapPanel >
- </ DataTemplate >
- </ Window.Resources >
- < рдЧреНрд░рд┐рдб >
- < Grid.ColumnDefinitions >
- < ColumnDefinition Width = "*" />
- < ColumnDefinition Width = "рдСрдЯреЛ" />
- < ColumnDefinition Width = "*" />
- </ Grid.ColumnDefinitions >
- < рдЯреНрд░реА рд╡реНрдпреВ рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "0" рдЖрдЗрдЯрдореНрд╕ рд╕реЛрд░реНрд╕ = " {рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЖрдЗрдЯрдо}" рдмреЙрд░реНрдбрд░рд╣реИрдХрд┐рдиреЗрд╕ = "0" >
- < TreeView.ItemTemplate >
- < HierarchicalDataTemplate ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рдмрдЧреНрд░реЗрд╢рди}" >
- < CheckBox IsChecked = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ IsSelected, Mode = TwoWay}" рд╕рд╛рдордЧреНрд░реА = "{рдмрд╛рдзреНрдпрдХрд╛рд░реА рдорд╛рди}" />
- </ HierarchicalDataTemplate >
- </ TreeView.ItemTemplate >
- </ рдЯреНрд░реА рд╡реНрдпреВ >
- < рдмрдЯрди рд╕рд╛рдордЧреНрд░реА = "рдЪрдпрдирд┐рдд рдЪрдпрдирд┐рдд" рд╡рд░реНрдЯрд┐рдХрд▓ рдСрд▓рдореЗрдВрдЯ = "рдХреЗрдВрджреНрд░" рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "1" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ = "рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ " />
- < рд╕реВрдЪреА рдмреЙрдХреНрд╕ рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "2" рдЖрдЗрдЯрдореНрд╕ рд╕реЛрд░реНрд╕ = " {рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗрд▓реЗрдХреНрдЯреАрдореНрд╕ }" рдмреЙрд░реНрдбрд░рдЯреАрдХреЗрдиреЗрд╕ = "0" />
- </ рдЧреНрд░рд┐рдб >
- </ Window >
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

рд╕рдВрджрд░реНрдн
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реВрддреНрд░
- рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝
- DynamicObject
- MVVM
- рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред