рдкреНрд░рд┐рдЬреНрдо рдбрд┐рд╡реЗрд▓рдкрд░ рдХреА рдЧрд╛рдЗрдб - рдкрд╛рд░реНрдЯ 9, рд▓реВрдЬрд╝рд▓реА рд▓рд┐рдВрдХреНрдб рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
  1. рдкрд░рд┐рдЪрдп
  2. рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рд┐рдЬреНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ
  3. рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди
  4. рдореЙрдбреНрдпреВрд▓рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕
  5. рдПрдорд╡реАрд╡реАрдПрдо рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
  6. рдЙрдиреНрдирдд MVVM рдкрд░рд┐рджреГрд╢реНрдп
  7. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрдорд╛рдг
    1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢
  8. рдиреЗрд╡рд┐рдЧреЗрд╢рди
    1. рджреГрд╢реНрдп-рдЖрдзрд╛рд░рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди
  9. рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдХреНрд░рд┐рдпрд╛

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

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



рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ ( рд╕рдорд╛рдзрд╛рди рдХрдорд╛рдВрдбрд┐рдВрдЧ )


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

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

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

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

CompositeCommand рд╡рд░реНрдЧ рд╕рдХреНрд░рд┐рдпрдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЬрдм CanExecuteChanged рдЗрд╡реЗрдВрдЯ CanExecuteChanged , рддреЛ рдпрд╣ рд╕реНрд╡рдпрдВ рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдг CanExecute рдкрд░ CanExecute рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред CanExecute рдЕрдкрдиреЗ CanExecute рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╕рднреА рдмрд╛рд▓ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд░рддреЗ CanExecute ред рдпрджрд┐ рдХреЛрдИ рдХрдорд╛рдВрдб false рдЖрддреА false , рддреЛ CompositeCommand рднреА false рд▓реМрдЯрддрд╛ false , рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддрд╛ рд╣реИред

рдкреНрд░рд┐рдЬреНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА-рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╢реЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ CompositeCommand рдХрдорд╛рдВрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реЗрд╡ , рд╕реЗрд╡ рдСрд▓ рдФрд░ рдХреИрдВрд╕рд┐рд▓ ред рдореЙрдбреНрдпреВрд▓ рдЗрди рд╡реИрд╢реНрд╡рд┐рдХ рдЯреАрдореЛрдВ рдореЗрдВ рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рдЯреАрдореЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред

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

рдЖрдк рдирд┐рдореНрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ WPF рд░реВрдЯ рдХреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдЯ рддрддреНрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╕рдордпред


рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЖрджреЗрд╢ рдмрдирд╛рдирд╛


рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реНрдпреВ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ DelegateCommand рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ ICommand рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рдирд╛ рд╣реИред

 public class ArticleViewModel : NotificationObject { private readonly ICommand _showArticleListCommand; public ArticleViewModel(INewsFeedService newsFeedService, IRegionManager regionManager, IEventAggregator eventAggregator) { _showArticleListCommand = new DelegateCommand(this.ShowArticleList); } public ICommand ShowArticleListCommand { get { return _showArticleListCommand; } } } 

рдиреЛрдЯред
рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдХреНрд╕рд░ "рдЖрд▓рд╕реА" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╕реАрдзреЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ DelegateCommand рдмрдирд╛рдПрдВред

 public class ArticleViewModel : NotificationObject { private readonly ICommand _showArticleListCommand; public ArticleViewModel(INewsFeedService newsFeedService, IRegionManager regionManager, IEventAggregator eventAggregator) { } public ICommand ShowArticleListCommand { get { return _showArticleListCommand ?? ( _showArticleListCommand = new DelegateCommand(this.ShowArticleList) ); } } } 


рдХрдореНрдкреЛрдЬрд┐рдЯ рдХрдорд╛рдВрдб рдмрдирд╛рдирд╛


рдХрдореНрдкреЛрдЬрд╝рд┐рдЯ рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реНрдпреВ рдореЙрдбрд▓ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЯрд╛рдЗрдк CompositeCommand рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ ICommand рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рдирд╛ рд╣реИред

 public class MyViewModel : NotificationObject { private readonly CompositeCommand _saveAllCommand; public ArticleViewModel(INewsFeedService newsFeedService, IRegionManager regionManager, IEventAggregator eventAggregator) { _saveAllCommand = new CompositeCommand(); _saveAllCommand.RegisterCommand(new SaveProductsCommand()); _saveAllCommand.RegisterCommand(new SaveOrdersCommand()); } public ICommand SaveAllCommand { get { return _saveAllCommand; } } } 


рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рдЯреАрдо рдмрдирд╛рдирд╛


рдЖрдорддреМрд░ рдкрд░, рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рдХрдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, DelegateCommand рдпрд╛ CompositeCommand рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 public static class GlobalCommands { public static CompositeCommand MyCompositeCommand = new CompositeCommand(); } 

рдлрд┐рд░, рдореЙрдбреНрдпреВрд▓ рдмрдЪреНрдЪреЗ рдХреА рдЯреАрдореЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред

 GlobalCommands.MyCompositeCommand.RegisterCommand(command1); GlobalCommands.MyCompositeCommand.RegisterCommand(command2); 

рдиреЛрдЯред
рдХреЛрдб рдХреА рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдордзреНрдпрд╕реНрдерддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирдХрд▓реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ


рдирд┐рдореНрди рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ WPF рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдорд╛рдВрдб рдХреЗ рдмрдЯрди рдХреЛ рдХреИрд╕реЗ рдмрд╛рдВрдзреЗрдВред

 <Button Name="MyCompositeCommandButton" Command="{x:Static local:GlobalCommands.MyCompositeCommand}" Content="Execute My Composite Command"> </Button> 

рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ x:static рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ x:static , рдЗрд╕рд▓рд┐рдП рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ рдПрдХ рдмрдЯрди рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ public рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреА рд╣реЛрдЧреАред
     public ICommand MyCompositeCommand { get { return GlobalCommands.MyCompositeCommand; } } 

  2. рдЖрдорддреМрд░ рдкрд░, рджреГрд╢реНрдп рдореЙрдбрд▓ рдПрдХ DataContext (рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
     view.DataContext = model; 

  3. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдирд┐рдореНрди XML рдирд╛рдо рд╕реНрдерд╛рди рд░реВрдЯ рддрддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
     xmlns:prism="clr-namespace:Microsoft.Practices.Prism.Commands;assembly=Microsoft.Practices.Prism" 

  4. рд╕рдВрд▓рдЧреНрди Click.Command рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рдХреЛ рдмрдЯрди рдХреЛ Click.Command ред
     <Button Name="MyCommandButton" prism:Click.Command="{Binding MyCompositeCommand}" Content="Execute MyCommand"/> </Button> 

рдиреЛрдЯред
рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╣реИ Application.Resources рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдб рдХреЛ рд╕рд╣реЗрдЬрдирд╛ред ApplicationResl рдлрд╝рд╛рдЗрд▓ред рд╕реНрд░реЛрдд рд╕реНрд░реЛрддред рдЙрд╕рдХреЗ рдмрд╛рдж, рджреГрд╢реНрдп рдореЗрдВ, рдЗрд╕реЗ рдмрд╛рдВрдзреЗрдВред

 <Button Name="MyCommandButton" prism:Click.Command="{Binding MyCompositeCommand, Source={StaticResource GlobalCommands}} Content="Execute MyCommand"/> </Button> 


рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн


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

RegionContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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



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

DataContext рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЕрдкрдиреЗ рдореВрд▓ рддрддреНрд╡реЛрдВ рд╕реЗ рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╛рд▓ рддрддреНрд╡ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ DataContext рдХреЛ рдЙрдирдХреЗ рдореВрд▓ рддрддреНрд╡реЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рджреГрд╢реНрдп рд╡реГрдХреНрд╖ рдХреЛ рдлреИрд▓рд╛рддрд╛ рд╣реИред

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


рд╕рд╛рдЭрд╛ рд╕реЗрд╡рд╛рдПрдБ


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

рд╕реНрдЯреЙрдХ рдЯреНрд░реЗрдбрд░ рдЖрд░рдЖрдИ рдореЗрдВ , рдорд╛рд░реНрдХреЗрдЯ рдореЙрдбреНрдпреВрд▓ IMarketFeedService рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐ рдореЙрдбреНрдпреВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд DI рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред IMarketFeedService рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ StockTraderRI.Infrastructure рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рднрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдорд╛рд░реНрдХреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпреЗ рд╕реЗрд╡рд╛рдПрдБ MEF рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, MarketFeedService.cs рдФрд░ MarketHistoryService.cs рдлрд╝рд╛рдЗрд▓реЗрдВ рджреЗрдЦреЗрдВ ред рд╕реНрдерд┐рддрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ IMarketFeedService рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ IMarketFeedService рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

 [Export(typeof(IMarketFeedService))] [PartCreationPolicy(CreationPolicy.Shared)] public class MarketFeedService : IMarketFeedService, IDisposable { ... } 

рдиреЛрдЯред
рдХреБрдЫ DI рдХрдВрдЯреЗрдирд░ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдкрдВрдЬреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкрдВрдЬреАрдХрд░рдг рдЖрдорддреМрд░ рдкрд░ IModule.Initialize рдкрджреНрдзрддрд┐ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рднрд╛рдЧ 4, " рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдореЙрдбреНрдпреВрд▓рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ " рджреЗрдЦреЗрдВред


рдЗрд╡реЗрдВрдЯ рдПрдЧреНрд░реАрдЧреЗрд╢рди


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

EventAggregator рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рди / рд╕рджрд╕реНрдпрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдкреНрд░рдХрд╛рд╢рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ EventAggregator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдЬреИрд╕реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛрдб рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордпред

рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдЯреЙрдХ рдЯреНрд░реЗрдбрд░ рдЖрд░рдЖрдИ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдЬрдм рдЖрдк рдкреНрд░реЛрд╕реЗрд╕ рдСрд░реНрдбрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрд░реНрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдирдХреЗ рд╕рдмрдорд┐рд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдШрдЯрдирд╛ рдПрдХрддреНрд░реАрдХрд░рдг

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

рдпрджрд┐ рдЖрдк .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреА рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░-рд╕реНрдерд┐рд░ рдпрд╛ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рд░ рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕рджрд╕реНрдпрддрд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкреНрд░рдХрд╛рд╢рдХ рджреНрд╡рд╛рд░рд╛ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдХрдЪрд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред


IEventAggregator рдЗрдВрдЯрд░рдлрд╝реЗрд╕


EventAggregator рд╕реЗрд╡рд╛ рдХрдВрдЯреЗрдирд░ рд╕реЗ IEventAggregator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EventAggregator рдХреА IEventAggregator рд╣реИред рдИрд╡реЗрдВрдЯ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдпрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

 public interface IEventAggregator { TEventType GetEvent<TEventType>() where TEventType : EventBase; } 

EventAggregator рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд╢рдХ, рдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдШрдЯрдирд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ рдпрд╛ рдирд╣реАрдВред


рдХреНрд▓рд╛рд╕ рдХрдореНрдкреЛрдЬрд┐рдЯрдкреНрд░реЗрдВрдЯреЗрд╢рдирдИрд╡реЗрдВрдЯ


рдкреНрд░рдХрд╛рд╢рдХреЛрдВ рдХреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╕рд▓реА рдХрд╛рдо рдХрдВрдкреЛрдЬрд┐рдЯрдкрд░реНрд╕реЗрдВрдЯреЗрд╢рди CompositePresentationEvent рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд┐рдЬрд╝реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ EventBase рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

CompositePresentationEvent рд╡рд░реНрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдкреЗрд▓реЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд╢рдХреЛрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдлрд▓ рдИрд╡реЗрдВрдЯ рд╣реБрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрди рдХреЛрдб CompositePresentationEvent рд╡рд░реНрдЧ рдХреА рдЖрдВрд╢рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

 public class CompositePresentationEvent<TPayload> : EventBase { ... public SubscriptionToken Subscribe(Action<TPayload> action); public SubscriptionToken Subscribe(Action<TPayload> action, ThreadOption threadOption); public SubscriptionToken Subscribe(Action<TPayload> action, bool keepSubscriberReferenceAlive) public virtual SubscriptionToken Subscribe(Action<TPayload> action, ThreadOption threadOption, bool keepSubscriberReferenceAlive); public virtual SubscriptionToken Subscribe(Action<TPayload> action, ThreadOption threadOption, bool keepSubscriberReferenceAlive, Predicate<TPayload> filter); public virtual void Publish(TPayload payload); public virtual void Unsubscribe(Action<TPayload> subscriber); public virtual bool Contains(Action<TPayload> subscriber) ... } 


рдИрд╡реЗрдВрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛


рдирд┐рдореНрди рдЕрдиреБрднрд╛рдЧ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ, рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ, рдФрд░ IEventAggregator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CompositePresentationEvent рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред


рдШрдЯрдирд╛ рдирд┐рд░реНрдорд╛рдг

CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
рд╡рд░реНрдЧ CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
рдХрд╛ CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .

CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .

CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
 CompositePresentationEvent      ,   ,  . TPayLoad     .    ,       . 

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .
CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .

CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .

CompositePresentationEvent , , . TPayLoad . , .

, TickerSymbolSelectedEvent Stock Trader RI . , . , .

public class TickerSymbolSelectedEvent : CompositePresentationEvent<string> { }
.
, , . Stock Trader RI , StockTraderRI.Infrastructure .



EventAggregator Publish . EventAggregator , , IEventAggregator .

, TickerSymbolSelectedEvent .

this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Publish("STOCK0");


, Subscribe CompositePresentationEvent . CompositePresentationEvents . .

, UI. , . , . , .

.


UI
, UI . WPF Silverlight, UI UI.

, . UI, UI. , UI. , UI, Dispatcher .

CompositePresentationEvent , UI. , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews, ThreadOption.UIThread); } public void ShowNews(string companySymbol) { this.articlePresentationModel.SetTickerSymbol(companySymbol); }
ThreadOption :

PublisherThread . . . BackgroundThread . .NET Framework. UIThread . UI.


. , filter . System.Predicate , , , .

, -, .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId);

.
- Silverlight, , ( CompositePresentationEvent ). - , Silverlight. , public , keepSubscriberReferenceAlive true , ( ).

- Silverlight, public , , , ( ).

public bool FundOrderFilter(FundOrder fundOrder){ return fundOrder.CustomerId == this.customerId; } ... FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
.
Subscribe Microsoft.Practices.Prism.Events.SubscriptionToken , . , -, , .

.
, . .


( Strong references )
, , , , , . .

, CompositePresentationEvent . , , CompositePresentationEvent , . .

, keepSubscriberReferenceAlive Subscribe , .

FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>(); bool keepSubscriberReferenceAlive = true; fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, keepSubscriberReferenceAlive, fundOrder => fundOrder.CustomerId == _customerId);
keepSubscriberReferenceAlive bool :

true , , . , . false ( , ), , . , .


, , , . , TickerSymbolSelectedEvent , string , .

public void Run() { ... this.eventAggregator .GetEvent<TickerSymbolSelectedEvent>() .Subscribe(ShowNews); } public void ShowNews(string companySymbol) { articlePresentationModel.SetTickerSymbol(companySymbol); }


, , , .

, , .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.PublisherThread); fundAddedEvent.Unsubscribe(FundAddedEventHandler);
, , . Subscribe .

FundAddedEvent fundAddedEvent = this.eventAggregator.GetEvent<FundAddedEvent>(); subscriptionToken = fundAddedEvent.Subscribe( FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == this.customerId); fundAddedEvent.Unsubscribe(subscriptionToken);


, "Weak References" MSDN: http://msdn.microsoft.com/en-us/library/ms404247.aspx .

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


All Articles