main
 1using System.Windows;
 2using System.Windows.Controls;
 3using presentation.windows.eventing;
 4
 5namespace presentation.windows
 6{
 7    public class WpfApplicationController : ApplicationController
 8    {
 9        RegionManager region_manager;
10        PresenterFactory factory;
11        EventAggregator event_aggregator;
12
13        public WpfApplicationController(RegionManager region_manager, PresenterFactory factory, EventAggregator event_aggregator)
14        {
15            this.region_manager = region_manager;
16            this.event_aggregator = event_aggregator;
17            this.factory = factory;
18        }
19
20        public void add_tab<Presenter, View>() where Presenter : TabPresenter where View : FrameworkElement, Tab<Presenter>, new()
21        {
22            var presenter = factory.create<Presenter>();
23            event_aggregator.subscribe(presenter);
24            presenter.present();
25            region_manager.region<TabControl>(x => x.Items.Add(new TabItem
26                                                               {
27                                                                   Header = presenter.Header,
28                                                                   Content = new View {DataContext = presenter}
29                                                               }));
30        }
31
32        public void launch_dialog<Presenter, Dialog>() where Presenter : DialogPresenter where Dialog : FrameworkElement, Dialog<Presenter>, new()
33        {
34            var presenter = factory.create<Presenter>();
35            var dialog = new Dialog {DataContext = presenter};
36            presenter.close = () =>
37            {
38                dialog.Close();
39            };
40            presenter.present();
41            dialog.open();
42        }
43
44        public void load_region<Presenter, Region>() where Presenter : windows.Presenter where Region : FrameworkElement, View<Presenter>, new()
45        {
46            var presenter = factory.create<Presenter>();
47            event_aggregator.subscribe(presenter);
48            presenter.present();
49            region_manager.region<Region>(x =>
50            {
51                x.DataContext = presenter;
52            });
53        }
54    }
55}