Starting a modular application development using Prism,
WPF and Unity container.
Step 1
·
In Visual Studio 2010, start a new WPF project.
·
Remove MainWindow.xaml file that was
automatically created.
· Remove StartupUri="MainWindow.xaml" from App.xaml file.
· Add the following references
· Remove StartupUri="MainWindow.xaml" from App.xaml file.
· Add the following references
o
Microsoft.Practices.Prism
o Microsoft.Practices.Prism.Unity
o Microsoft.Practices.Prism.UnityExtensions
o Microsoft.Practices.Prism.ServiceLocation
o Microsoft.Practices.Prism.Interactivity
·
Create a class called Bootstrapper.cs and derive
this from UnityBootstrapper class.
·
Create
the main shell window by adding a new wpf window called PrismAppShell.xaml
·
Implement the abstract method CreateShell in
Bootstrapper class.
·
Override two methods in Bootstrapper class
o
InitializeModules
o
ConfigureModuleCatalog
·
Inside App.xaml.cs within OnStartup method instantiate Bootstratper object and call its Run()
Inside App.xaml.cs within OnStartup method instantiate Bootstratper object and call its Run()
Therefore the files are
going to look like this
App.xaml
<Application x:Class="Prism.ModuleExmaple.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Application.Resources>
</Application.Resources>
</Application>
App.xaml.cs
public partial class App : Application
{
protected
override void
OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
BootStrapper
bootstrapper = new BootStrapper();
bootstrapper.Run();
}
}
Bootstrapper.cs
protected
override System.Windows.DependencyObject CreateShell()
{
return
this.Container.Resolve<PrismAppShell>();
}
protected
override void
InitializeModules()
{
base.InitializeModules();
App.Current.MainWindow
= (PrismAppShell)this.Shell;
App.Current.MainWindow.Show();
}
protected
override void
ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
this.ModuleCatalog.AddModule(null); // TODO -
placeholder
}
}
PrismAppShell.xaml
<Window x:Class="Prism.ModuleExmaple.PrismAppShell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PrismAppShell" Height="300" Width="300">
<Grid>
</Grid>
</Window>
Now one with run this application from visual studio the
empty shell window will come up like below.
Step 2
Now let us divide the main shell xaml into regions and mark them with regional names.
![](data:image/png;base64,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)
Step 3
In step 3. let us create few individual modules such and load them on the regions on the shell as we defined before. Also in the shell xaml on the top we used a ribbon control and defined the RibbonRegion there, a TreeView control on the left for TreeRegion, a TabControl in the middle for BlotterRegion. Bottom and right (StatusRegion and AlertRegion) we kept as ContentControl still.
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAHMCAIAAACm7aEKAAAgAElEQVR4nO29eXQUR54umpjr0/icO3feef3ezFzfufOme7o94+sVpMKN+mAwXkDY7tPGpo1ZDTLF4rG7bYwNxthgNIBB4BJaQEIsEkhsEkISVVoACWTEIoRAIAmhQiqpkEp7aat9i/dHVGVlVkZmZamWzCrFd+JwgsjIyMis+BTxVcWXP+L56Qufn75w/vL1v1y7DmwjOOEU2en2ndpP/rbt+ekLn502Hw5+mC+t632oGX2oGW3SjD7UjBLwwI3qamDV4oTTeEhV1689P32hJHYtSQxJ7NrSut6HGh2ZCMgbYOnFCafxk6hzBcyU1vU2a3TNXbpmja5ZoyMgb4BZgxNO4ydR5wo3Mbp0ZHIupYBJjRNOok3r46ZTk/8NIjWGsktHJhcxjC3OlP8Xwom/yMlCz3Qojnhhz322o5R0f1M0z5roq7gRl8//rDFfESeRpvVx08kMmWemsrw96+Oml+Xt8VqI1Bg0Yjw7bf7z0xcBw0NgeAjubYgm5std+T35D53lnik9jnh+z72xHeWfxtZOoK6Ok4jS+rjpZIbMI1Ph8a3r46ZXylPgfyvlKevjphce3+pR7fnpi2CC4//56YtK63ofdevIBDXGIqBvAPoGcPZ9YsrXzTDPlfbHEc/tqRvbUf5pbO0E6uo4BSuV5f7ksTRaHze9LPcnjlPWx00nM2SeLRUe37I+bnrl+X2V5/etj5teeHwLsw5JDDj+EcSApUBXB3R1QJccRxDRO4pc/60DujpQ91U0uZ7JI6s9t6eOmiHzye71z7JkWgW2dna8Bws9r0trvA7oivZMcdXJe4+Y8lUzrJDnbNZ1uvcrxi17jiDek9MqvCdnHsUpaKksdwedFTu466+Pm05myDxHKjz2PaxZeOx7ZAXqXAHzLMQYKHOlI3teJgiCiDsJ/xsfR+ZvrYomntlzCxZ6ZPgUItshiMXxYKAMnIwliFi5uxuuo07AQ/FxRKzc+a+rwsurmln7hr5i9LYj9L6VgZOx0duO0I/iFNxUePQr59g9+pXXyuvjppMZMs+Ryk5+56Tcye+QFahzBcyX1vU+6taTyaUxunNo6driaIKIy4aZ1+SucvlCIi47B3R/HUf8ds81asZboZd2PPJsJTkg+zUCdoxRwbNNr1e8tjiaoGDh1+gr4hS0VHj408LDn3qtxlx3rY+bzlG/Mm/D+rjpsPH1cdMr8zYw6yA1Bk18OzUG48zmrb8lFn4dPsTYu+elMRDDXYH1ijiJJnHzAaaynC/Xx00vy/kS+V8yITVGY8comYjnX130/KsuYmQvpo6z6K17QffXceRAdI8kcgCRwxEOWW62cLSTw48YX8cRr8md/zrbjN66l6VNPld0nc56RZxElLwSA0kDZOHzry56dtp8OPhhvrSu91qzlkx0YnR/HUdbWuSAbuqSAzWIs19z1X+NLJQvRC1OuNtB08CN6K1fu7ia07z1t8RLi5u7v44jfhu38LdOec2cRrxckb6awksp0Sc+MwbP9PyriySxa0liQI1RVtdbds+ZCMgbwe95TAmP4/GVAksMcq6AGU9iQN4Ifs9jSpgYOI0xUecKNDFeeHXRC5gYOI2z9MKri56dNh8O/hdcGiNiiIETTmNML7y6SBK7liQGWmNgYuA03hJ1roAZhMZ44dVFF6834YTT+EnUuQJNDFgqeEdxwimUia/GELyjOOEUysRTYywWvKM44RTK9MKri2GC4/+FVxcjNUawiPFfiVmCP4Lw6hhOoUkkMeD4RxADliJPPltyNfFgxt7DhxPTDialH92TkSbLSD9fcZv/5ZHj7+TJkwAAj39D/FwwMcZ5os4VMO8DMfalZ9jrVlvvf2K7v8pWt8Z+f5W9bnXiwYzEE/LkEyVJx88nnjh/9mINx+WR4w8wYLPZfOLG7tO91LQ9p/eHzJ6vD3b/Z3LXir2aBTs6/7S1461NHa9+/fjVrx9P+1LNs2P+p89/rlu7++4nO+4u2Xbnwx9q/7yxds5Xt2f+rWba2popK289v+LWvy+9+W8Lb/7rRzf/9aObgg+O8ZyocwXM+6AxEg9mWDvOmToKTB35Zs1ZU0eBpfPsvvRDDXXlZEo8cZ7j8hwzhsPhsNvtNpvNZrP19/en7vmBmhTltzia3X26N6sSZFWCI5cd6ZfsqaU2mdy6+5wl/ox58wnTN1mGLw7p16bpV6aMrkwZnbwSMcWxEUOW8B2fNE3yH8jTP9t791C5I/2iI6XE/vN52858y9ZTpk3HTV8dNXx+UL/mgA52aWXKKCaGsMkvjSHLSG+oK1+1QUZjwsFDsvS0vRkZiQfT9x08ui/j8NmSKrbLc8wYNpvNarWaLRazxZK65wcAAHCYHdZRh7k3dc8PC96dmSevZGuWOl3EZ/d8e6Tn8/1dK/Zq/rK9c+7mxzO/fjztSzWZXlpxg2fHLl5vkiV8V32tsPpaIXNao4KNGP+5p27VT3eXb7+zcGvt+9/VvvPN7Te+rJn+Wc3U1TUvxd16dln175fc/M1HeMYQPvmlMRIPplMpwZaSMg6yXZ5jxrBYLGaz2Wg0jo6Opu75AdhNDuuIw9xtN7Sl7vnh9vXLC96debqwAtnsscIb3APX4QA2u8Nsdag6+iWxcTw7dtFvYiRlFff3NPFJyF7hFLLkn8bIOAxnDI4h0lBXnpiexnZ5jhnDaDIaDAadTjcyMnK55KzDOuwwd9kNrbaR+s1frVrw7swF7878/W/+Cdns4bO/IDuzdB8BAHA4HBY7MFsdBrNdcaVuzMQgfudMAIBcCnwixg+HSj1Sf09T7a0yTAxhk58a4xCfGSPx4CG2y3PMGGU3HpdcUxdXqfMr2o4pHh1TPGptbbKN3LMO3rD2X7T0FJg7T7ARI/1UOZUPXfr7jX351x/vXbqPWLqPsFqByQwMJvuoweYPMcY8Y+xKP//Dz6e+2n4UEsNscRjM9lGDfVhvhcSovqHAxBA2+aUx4FLK+4zhIzHgiWU3HlPbOZD34M+fn7pfV2Htv2DpPmfuzDar09iIQV1KdenvQz7AFJdKLN1H6Mxg1GAfHA0AMZjzhv8zxrVfijAxhE1+aowMclo4crYq48yVtJPlydkXEo8W78k4v/PAuZ0HzsUnn9kiO7Ep4dg32zOYLXDMGEVXWqnE2Jl5/9KtjjeW7b9z45S545hJfcCo2sNnKbV0H9HYlw8A6Bp1MkRnBIM6MDhq6x+yCDJjeE2VFfmYGMImHhpjxuIXZrB9K5VBfiuVfqqCHBZWm0NvtA+OWgdHrV1ai6rL9KDdwH/8wUZOlz0EAByRa47INU0tfRtTb7/xcdqsJUmvLkgwtacaWxOMj7bxWUoVt34J6WGxAMiKMw++7B8B/UPWbq3Zf2Lk0uErMZAzRvmFXEwMYdMLMxZLYtfCwQ/zKI3BQgzqTxZJx8sAAFHT346a/rbeZPtm235quqPU8R9/cMY4kl9HDj6d0dLZM9rQMlB+vf6PH2w3te4yKn80PNzIRozU7DLq3284UbT2N+iMoLGnfuk+olsLugcsHX3mM6V3BdcYg6O2vmFrt9bc0WeBxLhQfBITQ9hEUgKO/xdmIDUGOzHItOfQeQCAxQb0Jpt2xNo9YG7rNj1oNzxoN9xR6q43jPg0/i5eb9p3/DoAIOVsy38dvvvVvso1O0vW7Cy5cbf5j/N+/P1v/olMyHOTsoo9WEFN5Y/OqXtBR6+5vdt07Pwd/7+VIjXGGJZSyBmjpOg4JoawiTpXoInBsZSipu3786w254zRpTV7zBgVd4Z9JcZ/HagAANhs9hGdpaNntKl1oPZB743apj/8abPXzkBiOACw2RwWG1i6j1giIxTKn4uafr6taVT3gtY+0NZleqQx+kOMMc8YXpP8XBYmhrCJOlfAPJMYS16YscRrQz/8nGMw2QdHbV0DTlEBJ4rrDSMVd4ZKqgd9JcY3uxUAAHKugOn67aap72z02pmkrGKHw2GzA7MFGExg1ACW7iN6h0CXFjzuA6oe0NwFWjpNTWqDIMS4X1fhTHcr7tZevHWz5PrV85UV+ZfKzpTJc+QFx4rOHsXEEDa9MGOJJHYtHPwwj9QY3onxzfYMSWwcd2KexUGMNT/kGs1W1eO+h62auqa2usbWuw2tDx6po2PXe+1MUlaxqqO/6VH7vQdt1fdUv9SqLtxoKfrlUV6F8sQFWvKVGEsWzZsm+Q8+ia1jXp8Sx+PCKWSJpAQc/y/MWILUGN6JMbbENv6u3FIuWX/8tcWJry1OfPXDXX98P37an7dMfedbydyvo2Z/6bVZn8afr4zFaTwk6lyBJgbPpdTYkmjHn2g7hlNoEnWugPmQEgMnnMSZeGmMFzExcBpn6cUZS2CC4/9FpMbAxMBpvCWSGHD8I4gBSwXvKE44hTJR54oXkRoDHuD+2h4DI8JAnSte5NAYQvcTAyOk4Ksx+LSVkKehpvhszaZszboMzafJmrgEzcJ4zdx4zdxNmlnrNLPWaWLWtXpvEQNDIPDVGHzaSsjTZFeB7CqQcQlkXALJcpAsBwl5xvg846Zs47ps47oM46cZxrhkY1yycXJcbbDvDQNjzAikxvCcLlxzxTzXRBGzrpVMk+Oqgn1vGBhjRmA0RlSUFACQkS0fHDQajcBoBINGMGg0DhqNg4PGwUGjZtCoGTS2aoytGmOjxljVqJk7dy6iIYXUFQpSqmC9mkJKxMiUPG5OKYvhWRN5Feep7j4RyNb8uorrWqg7Vspi0FdEt8BRk+Mo9e64Hrrf4OwD23OVKuBT4Hj8PoPf5xUAjRElTSOJwTxqBC6eDALNIGgdBK0aY2MrihjOJ+HMy1g/pDEPAp9AJYYzFwAKsF2LiImJ8WgaDtkQECMot+RbH5hHlDLn86COihCCh8aYufTFmUvZzo+SpuVUD/EhhgYSQ2Ns1RhrkTMG389IMGIEbRgppESMVEpnhkJKSKW8LxdpxCB5IRgxZi59dtp8OPhhnhcxoqRpgGSFtIaLGM5lFY0YLEsphZT5F5Iyk7oeD/mImUOWsjCQKmgV2NqRSb3N0khiOIcyQUgV7kL3NaQKV2WFs4y6KGBci+w8OQLgwODuv7swRiZjfyaA5TnAZjzGK2VSdB7xfheM9S/tFFc1jj4w4eYFpTLzI2K9kOuj4R4/yJ4oZTEEAODFmUslsWtJYrBoDDoxXHygsQKgiOHWG4POpBkErRpQ1TiI1hiunlLuwZV3f2QcxOAoRLZDGR6sHxJyKUXlsKsCdWC76lAvRTnV41ruMejuJDkoOfsPCylqhPuZUI46/0xTNQb5LCDb3Y/Gp7ug1eP+1NDiAjAfpesemVdEXoj60fAbP86euCtR5wqYQWkMBjGipDUerABeiGFslbdeSqhNnifP3lTVWMUivj2eAX0adT0t34nhpR2PvAeYQ4fjKtRW2NpnXovSAo1inP2n/FXl+0yoQpY5qdLvGPH3lS3vfkLMPiDvhUA8Uc8eMA+wPzfkhYC3z53ZE0p96lyBJgbbUsqDFYBCDI0RVA2CWtc3VEYjaMxuzF4oT5ibty4mO25ydvw8+by5cagn4gTlGwkxEINlEkedC582Z/scH7BSFhMjU5AjPhjEYPszTy/jTwx3m2SHqNXIwxx9YGIMxGBcCPAhBv0qdGKMRWMA11e0VEBi1BrBrEZjXKNxU+3gwuzWRo0xO7sxfq583ay8dbPyNi2Ux8fJN83L+3RuAuPGZdSbJCd6ylTosSym3Id7/uSzlGIurwNGDED7u89NDPScjlqXs/WfuZTifibUZQbb3TGXUpx3Qfs0GFdBPG1mH5igkZ68HuM07gtxPDe2ntCWUj5rDDZAYsyrHZx3aVBjBINGkFE7OC+jdWFcVdw8edzCS5eqNEYjSE6oWhiTsWleNqMByqKFpoWYYo8xiVO+wHGWsYpvnn/Fqb3iRwx39/kNKfSfeaUsBrVgQ2pQ1xUp4hv5TJDtkI/IDahk6ePc612Q3wCQ36spXPKX+kly9AEBFzMoVRGfj7cLoZ8bd08UUsIpvn3WGGxwEkOuadQYAQBGAPIaB2clNM7aVDsvobFWY4TVkpMb582Vr5uXwadNjDAEx18Z3kDMGYG6EHKd5okxagwkMrLlra2adVWteY2aRs1gfO1gTHZrTHLr3OzWhZcGBwEAAAwawbrkxoXratd9muzrDWGECQJBDF5iZEwX4nfS2DUGB+bJNb/J0/wmTzNXrlmY3QgAWLiualZya8Ilzbrs1riExoXr8EapCEZgiBH4CzkXTrxOCaTGoCIhr3VeXmNCnsZdktC4cF1V3KbahIRGX1vDwAgxAqkxMDAiBoHUGBgYEYOgaIyxQVr2cZx8ycf5Hy3Omf/h4ffeT3nnTwmzY7fNenPj9Jl//UOMNGrqkpcmf/B/Xnz3mRB0BmOcwy+N4QDAAYDdAWwOYHMAuwPYHc7CMUBa9vGqW1Errr+85MqLfyl77k9F//7m6X+bnvUv0WlPPy/7h9/t/PX//vHv//G7/46JgREC8NQYy/i3ODZWAPYZY8GO9/ac2llyQ55yet+7n87GxMAIAV6cuQwmOP5fnLmMuZRaxocYDgBsDmCxA7MdWOzA5uDFEOq+khOKGs8GbQ6r1WG3AwcAvzrwq9Y+1ZDOJollbrKi/nyL+jLOb4eRgrmXdExtCGTTQ12T/WmN6dKE5y/IofvSNih4ceayZ6fNJ+mB0BgvzVz2kjdi2B3AbAd6m2PE6hixOkatDoPNYfHGDNL6V1jZVFjZdLaivrCy6fJtVVvX0MCwoX9Ib3c4HA7wVNpTqn4VkUw8lfZUW0cfCzEoW2YC/nEoZTEMH5HvUEgFs+lR4LF7m8spOaZLo/cscTcoRgq9NHOZJHYtHPwwj9AY3MSwO4DJDkasjgGzo8dk7zbae032IYvDYONiBtX6V1jZZBw6A5PV2KAeUD197GkijVBr1e1a9YTkCU/uf5JII260VDe1dnETIxhPGe5O4LVHgQvOjT20RhShsemRGLMdbgyjPOyJARMc/y8xl1KQN2znOwAw28GI1dFrsqsN9lad/bjGurzR3GOyD1sRxEBa/06V3jFqs+G80aMdJdIIVX+7wWTZeHPjpLRJE1Mn9o70TkieMDF14oMWDW9ikDvM/DTZUfazuUtpJ9I2w3oWenRSIYRNj9oUqwGCfgbXg2K5NVeW6uND3xd1t6jUc+coymPoduSFCtS5Ak0M7qWUxQ5GrY5ek71Nb28asR18bPlNlfGfrxofG+xasycx2Kx/xwqv69t3FFY2WW0OAACRRjgcwOEAAID+gaGJqROfSHliQvKERz2qK7ce8V5KUTcVUzbA+mqyo7mPafuZkdutGYWenVQIYNNzwfusx/NBoZx0nlT0el/etjlTPIahn1Coc8VLaI3x2rKXXluGPNnmAEabQ2t2PDbYm0ZsaWrLv1YZt7Ra//mqsU1v70cRA239O3NltG7ZqdI7BrP9YYf56WNPP+pt7xu2HW46PClt0oSUCbm3zz6R8kRLT+fJknvexHeATXbUsUT3OtCmD4YzibmHk9IH2tij9i1INj0XOFZS7kfo04NilDCHvk8uMZ4ew+DjpdeWSWLXwsEP8yiNwUIMqwPorI5ek12lt2c8drLiR5WTGAMMYgAW69/+nAtDVyTHCq8P6Wx6o719QE2kEUQa0TbQPqLXPbn/ydr2u/3D1kca43H5XW9LKWQhrYIvJjva9y0e8zuDL8hCZn9Cb9MjwXIM4cLj+aCYJV4sezyIwcNjGHyQlIDj/6XXkBqDhRgWOxixOrpN9mOd1t+4WAGJ0WGwD7J8LcW0/iVlFfcX/DrjzJXeQcv2UwMF13UN7eZ7KnNP//DpovLBUau6x9TQqq9V6mAsSUaTvhED8DfZIc5zr5Ipqze3pQ5ViFjheCoTxJIjODY9Bf1LY/itFE2C8X9QbPIG0R/e9knOzocQ1LkCTQy2pZSDIjCWN5r/+aqRTFB8j6DENxJJWcXdJybsz7mg7jHDKMP3Vfpape7KzYeS2DhqqFV/ieGpMb0Qg9mu65MlFSF1tcJayPgzH3qbHqVB6lEKjwmC4sLj9aCQ8yr3Aok2/ZHNU/NeOh8qUOcKmPdBY1gdwGBzDFoc3Ua72mBX6e1tevtjg73HZB+2OIycX9dSAYOsJmUVKzuM6w72fprSu0LWu3BX74Vf6pFBVgN292OHVypihDf80hh2B7DYgd7mGLY4BsyOfrOj3+wYtDhGrA6jzcF7wnAiKav4fqv+5t2WqzXNFdcflP1SL6+oEwcNmMDEiHD4pTEA5IYDmOwOg82htzkMNofR5uC/JYQKtuDc/t1gkICJEeEYu8aggtxjS26wxcAIa/ilMTAwIhU8NcbHQvcTAyOkeOm1j2GC4/+l1z5GagxMDIzxBZIYcPwjiAFLhe4nBkZIQZ0rYD6ciKHRaC7Q0dbWJnSnMCIB1LkC5sNDY8B9JRcuXBgYGNDr9Xq9fmBgoK2trbS01BduIH+yDTKC4qXCCDDCUmOQ1r9SOoqLi+VyuVwuLyoqKiwsPHfu3Llz56qqqqqqqo4ePYpqibaLNpjDFf/EEWYQXmNUVVXpdDr+9anWv+LiYo+jNpvNZDKNjo5qtdru7m61Wv1dZm9HR0dCAiPqAADeNo0GEJgYYQbhNUZOTs7Jkyf7+/u5qyGtf3K5HAAQtSDnem3LkiTbO5vbp68uj1qQ09fX19nZqVKpvs0a+vxAb3t7uy/EIPcCShUA6apToO1srNYzdoOB5yls1juMUEN4jZGTk9Pb23vw4MGOjg62OmzWv8LCQphhThRKpfI/04eOXAbL9vYqlcoffvgB1TByKUXd+axgc9Ux9mnTtnaTO1QZe8uBBwNppzDMTRhCQXiNkZOTAwDo7++XyWTNzc3IOmzWv/z8fLvd7pox7O983z59dYVKpWpqalq+b2hJwtCqPe3z4rsaGxv/9re/oRpWeLH+eTfZUBxFHDMDMs88xZd36WAEFcJrDEgMAEBXV9fWrVu1Wi2yGtL6l5ubS50o2tvbHz161NDQ8OGuwTnfdd9uHflgw9XYDU11dXXLly9HteptL6B3YrhqeLGesRGDxU6Hl1JCg4fGmPXxS7OCToyBgQGOGQOCaf07efLk8PAwqSiampru3bv3Xnzv/B1Df1xTE72s+L1va2Z8evX27dvz5s1DNcnH4YR21XHZ99DtoH2zyPnB71f1YPiLl2Z9LIldCwc/zKM0RpCJ0dfXx60x2JCdnQ0nCqVS2dDQcOfOnbe/a539deMbX96Z+dn1V1dXxMSVTFtWcOPGjTfeeAPVAI/d4yxB3BhOPS/WM4pJjd1q5+mbwxAMJCXg+H9pFlJjBJkYfL6VQiIrK4ucKG7dunXnzp26urq6urra2trq6uobN25cvXr18uXLv/zyy7Rp0wLXZfzda+SDOlegifHyrI9fDiYxfP0dg4qjR4+mpqb+9NNPGzduXLNmzYcffjh79uxp06ZNRiFwXcbEiHy8POvjZ6fNh4Mf5kNNjDAEJkbk4+VZH0ti15LEQGuMl2chv9LBwIhYvDxrOUxw/L88azlCY2BiYIw3kMSA4x9BDFgqdD8xMEIK6lwB85gYGBiAOlfAPNYYGBhhrjHUbS2eDr6WB0J3CiMSEN4aA+3g84Eb1E2EnL82K3wJCYYR/ghvjcHHwZefn5+fn+/VwUfdFYWqhjdpjC8IrzH8+eW7uLjYTIFOpxsaGurr69NoNHADVX19fU1NTVVVlX8OPvyL3riD8BrDn71ScrncbDbDpdTg4GB/f7+i/NZp+dUjuRdSMgt+2JtZWVlZVla2b98+78Tw3EuO2Nnn8c58dJA41FGZTEprAdUKdvOJCsJrDD4OPjYUFhaazeZHbd15JTUDAwOyQ4U2GwAAmM3mwaHRppbuz79Pyc3N3bFjB7uDj6kwkF481MTC7dSjHEUGgeGI7YLdfIJDeI3Bx8HHhvz8fLPZXHDh9l+3HNi898T25FMGo2loWNeq7r33QC2vuPvnuM3Z2dnbtm1jd/AxPEPcXjx/jnJYlLCbT2QQXmPwdPAhkZubq9fr2zu65ixa//jx479uOfBYM5B1tnLfkfPxSae+/SnzvU++z8zM3LJli1cHHy04K4cXz5+jXoiB3Xwigig0BuDn4GOC6uCDptY5i9bPeP+zGe9/NnXuyqlzV+bk5KSnp2/evJmHg4/DWMc/SBxPHx9yKYXdfCKCKDSGPw4+rVar0WhaWloaGhpqa2uvXbtWXl5+/vz53NzcnJycQ4cOJScnb9q0iY+Dzz1a+cew8+2oJ4VYxDd28wkPHhrj9RUvv74ieD3w08HX1dV169atoqKiEydOZGZmpqenw++g4uPjt2zZsnnz5k2bNm3YsCGgDj6MyMfLr6+QxK6Fgx/mURojmMQIQwcfRuSDpAQc/y+/vgKlMYJJDAwMEYI6V6CJEeylFAaGCEGdK2AeEwMDQwQaAwNDhMAaAwMDAawxMDAQCG+N0d7anHv8Z2pqe9QgdKcwIgG8NMZksRIj9/jPzfeOGofOGIfOmLU51r4jpzP38OcGzb/nuS0cY1xj8usrYILjfzJSY4iWGGey9hq0J0hW2LsPWOu/OHH4p2Np248k/5gu+35/wrdJO7/x1gz2IWF4giQGHP8IYsBSofuJxsmjuw29RyErHN0HQPO3oH6VR8LEwBgDqHPFZKTGCBkxKioqdu7c6dMp2Rk7RzXpkBWlubtLc3cXn95VlLMz/9j200e25aRvzUz54VDid2l7v03ZvZGdIR7E4HbkYWvduAB1rpgsoMa4dOnSc88998wzz/h01rH07SPt++zdB1qvbjl3Yq+9dStoi3cn1VbQsgk0fQUaP6079ZfjB39maYZJDG5HnkcJRgRCFBoDsmLBggW+EuNIyrbhRz8BdULByT3XyxJA01fuRdTdZeD2B7aqt40XXlNmvfjVqveuXS5kaQYxY7A68hAePYwIhDumWBMAACAASURBVPAag2TFRx995CsxMhK3DD7Y2la1+VxOgqNlC7i/GtSvAnUrwO0Ftut/Mpa/NaL4Y3/u5K1rfp+Z8i17M9zE4GW1w4gw8NEYcZNfjwvS5amsGAMxDuzd3H9vY97x3bWVP4GmL8D9laB2sePme5YrsfrSGdpz0T0nn739X//Xord/yz5dAC5ioB15WKpHPia/HieJXQsHP8wjNUawiLFz585nKNi+fbtPp6fs+vZ++fdnj+8Cj74Hd5aBW/MtV9/RX3xtqOiVvtMvdh79XX3Cr7es+rfP1izlbIaDGExHHqoEI+JAUgKO/8mvxyE1RrCI4Sf27fjmTOZP9YVrb/9MwHQ94b+V75x0/se/P/Xd/3vkm/+V+uX/t/jt38rzDgrdU4wwA3WuQBMjqEspP/Fz/Pqft0h3bPx40+cf/nXFn5b/5Y15c6a9HvOi5MXfP/vb//Uv//P/+Yf/+3/806//h9DdxAg/UOcKmGcQ4424yW+IlBgYGEHC5DfiJLFr4eCHeZTGwMTAGGcgKQHH/+Q3kBoDEwNjnIE6V6CJgZdSGOMQ1LkC5scRMS6zo6Kiwmw2C91BDMEwrjXG5cuX2Q5VV1eXlpaOjI6Esj8Y4sG41hgVFRVsh6qqqgAAZWVlw8PDoesQhmgw7jRGVJSUzF+6dImtWllZWUlJSUlJSVlZGXtjlN/A+e4SYXo/XI0Eep9JQPyJnt2FUTuY76QONYJuoRlfGiNKmkYlxsWLF9lqWi0Wi8VsMZtYiaGUxVB3hChlMl67Q5CfKPVF6wH/vP1rkx6/RjTRbEJBjHDVGL6+9DZKmpZTPUQlBhz0qpaWtNRkq8UCALjcboeH0lKTVS0tZpOxpKQE1diYN9mGGzFoNyoaXoSEGOGqMXi+Jj1KmgZIVkhrqMQoKSmBrNAZ9Ok1+oP37V/IR99N6/0wrcdg0ENuoInBzguOt/tLFcD5iSo8Vk/wY2bEPUOG83OdS/WGMO0j9L/y/vgTKbfq5gXSsuIMeuBqiF6HOreS6zBXFcZD83qnoSMGh8b4ZPIbnwSxC2MFn+B9Lj4gWAEAkMvlaanJNpv12E3t5nLTgiztHxM6n9nY/JsvGsquN9ts1rTUZLlcjmjXezQXymdOY5BCSn687pB8yBmDJZyf+1zK8CJJh2Crv/5E8l5Rg549dKBCGhMT49ECpQ8wAghb9ClvdxoKYnzy7LT5cPDDfDgRA3gL3hclTYuS1iBZAQAoKipKTEy02awHCuonfVD5dwvLf/fl3ffSNO8fHjhQUG+zWRMTE4uKihDtcqykPIK8eobSY4vhxBhnPMP5UfPosH1++xOd45o6vGlX9GzBybAYmYJ5Iu0p0eKB0r4g8HanISGGJHYtSQw2jSFeYgBvwfsgN5isAAAUFBSoWloSdu8e1A69uun+pKXXXtmt+ey8eemxkUHtUMLu3aqWloKCAlSrHDHzaKPJXUxdSvElBo9wfp55Ztg+//2JSlkMOcrpjSDqwxuH04dSFiNVIGdXKjEQD00UxCDnCphBagzxEoNP8D4kKwAAeXl5wCW+qxoHX/nx4fRd6ndSey/dG4ICg6yDgMffPPitFHuQPfdfUp7EQJsHvRMDeC5dAuBPhGRDtYmor5TFUBdRUin5ygjqWZSlFOKhiYgY5LwRTkupMQfvg8jNzYUZq9UyOqIzGvQmg8FkNJpNJqvV4lEHAepCwvkxkT9KSKUkEZgCmvYx037HcFZHWwW9DReGhmXUZPyXpz/Rk+cs6zFmEHPaie77pROB8dDEQYww1hhjDt4HcejQoYDUwYg88NIYU0RJDH+C90HIZLKA1MGIPEx54xOY4PifgtQY4iSG/+Dz7gVf38+AERkgiQHHP4IYsFTofgYFG/lB6G5iCADqXDEFqTGmvPnJlDcjkxgYGGyY8uYnkti1cPDDPEpjYGJgjDOQlIDjf8qbSI2BiYExzkCdK9DEwEspjHEI6lwB8+FEDByDDyNICG+N4X8MPtrPpwp/7GkeW0ScQO/r49cdfocwggKeGmOl0P1Ew98YfIG0pymkBLlFiFpIYGKEI6a8uRImOP6nvLmSuZRaKVpi+BuDL5D2NKcBiDEFSXmPaUwMEWHKmyufnTafpAdSY4SIGELE4AugPU3hcuFRd97BEsR+O7qhDU4rMrbremxAZe4TxAg4qHMFzCM1RtCJIVQMvsDZ05yV3e04D9B2aFMcCJ6FFDXCbqzzc1bD4A3qXIFeSoVAYwgZgy9g9jTKWbQxjPb0OI8q2dw/HjY6bo8eRuAhvMYQOgZfoOxp1NUOtcGxEYPDu8f06GEEHgJrDDHE4Au0PY3u32ddSpHiAbmU4vDuubqB541gQmCNIYoYfIG0p5EtUr/sYrZGpyGX+KYvpdAePYzAQxQaY8zAMfgwggThNYY/wDH4MIIEEf2OgYEhHojldwwMDFEhvDUGBkaQEN4aAwMjSOChMd5aOeWtiCVGYWWTRzpbXn+q9M7xopvFv9QL3TsMwTDlrZWS2LVw8MM8SmO8hX7FZQSgsLKJWegAIOPMZUls3K40lvdzYkQ6prwlhQmO/ylvSVEaI3KJce5yI/W/vzrwK1W/ym53pBwvLauql8TG/XQAc2M8giQGHP8IYsBSofsZMFBf8GyzOfoHne8yfCrtKVW/ikgmnkp7ymZzJGUVT537CUzsjQUkBh+g/qBN+U078B4M7FjkD+pcAfOexIh6SxoVKcSgxuBTa9VPH3uaSCPUWrVaq56QPOHJ/U8SaUS16pbZYh/UWZOyiiE90G0FJQafxzYqjsHB9bZzrotjxyI/RL0llcSuhYMf5hEaIzKIQY3BZ7M5ICV0BtPGmxsnpU2amDqxd7RvQvKEiakTDSZ776BV029OyiqWxCLDrAUpBh+gbzoMNDGwY5E3SErA8R+F1BhhTQxkDD5IDADAqN4Eq01MnfhEyhMTkie09rUNjlg7+8yqbhMrMYISg8+V5TISko2Q/5fyidznCroXdo5Fz4dOqRRcMyN1rkATI6yXUmwx+Gw2x9PHnlZr1aN64+Gmw5PSJk1ImXC2Nv+JlCfUA12aPpOqy9isNnARw8tfNDbPnYIeXc69+ZwxhLxa/7gjSFDdf7R9v+HkWKQ9cZRAChqoc0VU5GkMjhh8aq2aSCPggspqtz65/8k76rs6o71ba2ntNDapDfdV+jHMGJRBjvTceVs1MYc+0uHERgYvkfvCzbHI8cCDbGaMfI3BEYPPZnOoNf0Wq6NB2VFb33KisPLHxOwvt6Wv+TZx+bpdt5tHfdYY/sbgozYxZmJwuf/C0bHo5XkHeSkVsRoDsMfgAwAkZRUPjFh7tJaOXnNbl6m5w9jQbqh7pK9p0l1v4CAG4+vKwMTgQy6W2Kx/bEsp7+4/Imwci+wP1PPBBhgRrjG8IimruFtrzjhdnpQp37k/d/OeLHLGqKwb5iIGCFQMPkDXGNwLJNrfW7JVap7V/UfrNrWEZSUmBscig/O0KkHU3pGuMbwiKatY3WNu0Zia1Mb7rfpapa76wWhV/ciVu8MXbw95IQZG5CLyNQY3krKKH3Ua4W95yISJMT4xLjQGB+DQ505C9xFDAIx3jYGBgcR41xgYGEjw1BirhO4nBkZIEfXWKpjg+I96axVSY2BiYIwvkMSA4x9BDFgqdD8xMEIK6lwB8wxizF4VNVukxMAx+DCChKjZqySxa+Hgh3mUxhArMcQUgw8jokBSAo7/qNlIjSFWYogpBh9GRIE6V6CJIeallJhi8GFEFKhzBcwLRowwj8GHo+NFFMSiMcI+Bh+ebyILotAYkRCDD0fHiywIrzEiJQaf8zBeSkUGBNYYERSDj1IBzxvhD4E1RuTE4AuyoQwjxOClMaLF+nUtjsGHESREz14FExz/0UxiwFKh+4kGjsGHESREz1717LT5JD0QGiN69uro2auF7icGRkgRPXu1JHYtHPwwj9AYmBgY4w0kJeD4j569GqkxMDEwxheocwWaGHgphTEOQZ0rYH4cEeMyOyoqKsxms9AdxBAM41pjXL58me1QdXV1aWnpyOhIKPuDIR6Ma41RUVHBdqiqqgoAUFZWNjw8HLoOYYgG405jUF/wfOnSJbZqZWVlJSUlJSUlZWVl7I2N5xh8AUTg79R/8NAYc1ZHz4kQYlBj8AEALl68yFbTarFYLGaL2cRKjPEegy+AECUx5qyWxK6Fgx/mURpDlMSoqqrS6XT861Nj8EHAQa9qaUlLTbZaLACAy+12eCgtNVnV0mI2GUtKSlCN4Rh8AYRIiQETHP/Rc5AaQ5TEyMnJOXnyZH9/P3c1ZAw+iJKSEsgKnUGfXqM/eN/+hXz03bTeD9N6DAY95AaaGDgGH+VBeESMYTwB2i07O8F2+6IBda5AE0O0S6mcnJze3t6DBw92dHSw1WGLwQchl8vTUpNtNuuxm9rN5aYFWdo/JnQ+s7H5N180lF1vttmsaanJcrkc0S6OwUe7I6kCMf/Qo38wsvTbFyMxyLkC5sOJGACA/v5+mUzW3NyMrMMRgw8AUFRUlJiYaLNZDxTUT/qg8u8Wlv/uy7vvpWnePzxwoKDeZrMmJiYWFRUh2sUx+Bi3TOsi7RsJrxwWKTHCVWNAYgAAurq6tm7dqtVqkdU4YvAVFBSoWloSdu8e1A69uun+pKXXXtmt+ey8eemxkUHtUMLu3aqWloKCAlSrOAYf/QqIqGKMMJaenRE7McJYYwAABgYGOGYMCLYYfHl5ecAlvqsaB1/58eH0Xep3Unsv3RuCAoOsg4DHn8nxG4OPvpRCPIHwJkZYaoy+vj5ujcGN3NxcmLFaLaMjOqNBbzIYTEaj2WSyWi0edRDAMfiU7iJXjvEEwpYYXjXGmug5a4TuJwI8v5XiwKFDhwJSByPyED1njSR2LRz8MI/UGGIkhq+/YzAhk8kCUgcj8kBSAo7/6DlrkBpDjMTwH3zeveDr+xkwIgPUuQJNDNEupfzHRn4QupsYAoA6V8D8OCIGBgYbwlhjYGAED2GvMQorHxZVPiysVBZU1hdWPiyqfHC2vOH0hTs5hTceKNuE7h1GuCLsNUbhlXoHAA4HAA7gAHZgh1lw8Ezl1NhVmBsYY0PYa4z8ikYA7MAB7MDhADALbDZbcnbphasNr8Qux9zAGAN4aQyJ+IhB7vLIvXAPADtZbgcOi9VuMTuSskr/EBsnif1k6tyVAvWRH+Cv1rQfkTGEh2TOGpjg+JcgNYbYiEE14uUobgMAZm3o/MNnLXY7OJZ37eDpKyN6i9ZgTsqSJ2UVS96OE7Sz3KDsg8IQE0hiwPGPIsacNaIihocR73jRDQDsDmC32+0Wq91gsQ6Pgv5Ra/eQtavXnJRVLIn9RNgOc0KM24QwAADUuUKC1BiS2DWSWOGJwWbEy8i74nCAGd9opn7eojPbs/J+OXzySkrmhYQM+fV29ekHl3dXb9t8c8nxK3XIZrntZrSdpJ6FVDAC8Hl67lyNyKSUzYAexgXEZr4YmQwzRxBIYtdIYtfCwQ/zKI0hNDE4jHjppy6a7cBkdowagFZv7x+1dg2YH/cYLzc/kLWsr9JVF3SUfp63b0ZCiaz6PPsVUHYz2sZpZiEJZhGb547q2POy2ZayUxYTQwCQlIDjXxKL1BgiIAabES81u0xvss/c0Bn1N2W/1nrs7NWDpyuSj5V8ln5kzY23dtV89X1B4QqZJuZA+pLyLxBNc9nNkK4ghomT6e/xwVqEKlSiXEQYoQV1ruAgxlqh+8lqxEvJko8a7IMj1n6tpbPPrO4xP+wwNLYbv0l/NHd/7OzjS5cm3l+wo/3ZxHn/mPyyZ6Ne7GYMMx39HEYj6BJMjHCEJHbts9Pmw8EP8yIlBmAx4iVlFWtHrDM2dkk+V7VrzFn5lQdPVyRnXfwi3bB4W9kM2fznMlfN/K5wxqrFv90Y7Xky2m5GNR25lz6oQrbVFX/PHV5KiRQkJciE1BiiIAYSKZnFXQNmTa+hVWNuVhvrW413lcaapqGkwu6FuwzTtsT/c8J/TP7rJ6+vzNt/Bu3RZtrNpNIYpm5GFlINpSzim795jfaSDtfJWHwLA+pcgSaGeGYMJFIyi9U9ZpXG9EBtuqcaua3U1zwYvVqvv1ij/TZD+fzXG6NXL54Rl7ngm2J+7SGXLsKtZ8b8YjcM/+B9xhA/MR5qzKlZJfsyFfuOFSceL0rKKk3JLE3KKt6XWeL77xjiIgbi9QQYIUE4aQwk9mWVSmJXRMUul8Quj54TJ4ld8Urscknsiui5K6LnrpC8HSeJXeFLe2IgBvOVBBihRthrDAyMYCDsNQYGRjAQ9hoDAyMYCHuNAVFY2eSRzpbXnyq9c7zoZvEv9UL3DiP8ECEao7CyiVnoACDjzGVJbNyuNJbXbGJgsCBCNMa5y43U//7qwK9U/Sq73ZFyvLSsql4SG/fTAcwNDB8QrhqDuj3EZnP0DzpfSfhU2lOqfhWRTDyV9pTN5kjKKp469xOY2BsLs1B6jBdKO+HL/hHuXuENWuGpMagOPrVW/fSxp4k0Qq1Vq7XqCckTntz/JJFGVKtumS32QZ01KasY0gPdVjiG0gMKKUG+g5xayJ/ZmBheEH4ag+rgs9kckBI6g2njzY2T0iZNTJ3YO9o3IXnCxNSJBpO9d9Cq6Yc+PqTBNTxD6bn2btFqK6SEVOpTC5gYHAgbjYF08EFiAABG9SZYbWLqxCdSnpiQPKG1r21wxNrZZ1Z1m1iJEa6h9GCbVGOIK8IL67VohZS9id7IzPAmejw+yjGuqmGH8NAYbA4+m83x9LGn1Vr1qN54uOnwpLRJE1ImnK3NfyLlCfVAl6bPpOoyNqsNXMTw8pfRNUQ83UkUTx/NjsfcyoHYTO53KD3nUXennDfi9VrM3ezcxGB2g/rs6NOK5yMKb4SHxuBw8Km1aiKNgAsqq9365P4n76jv6oz2bq2ltdPYpDbcV+nHMGN4OvvEFUrP09Lk2RryWmj/E+eNILrB/ugiyzsSNhqDI5SezeZQa/otVkeDsqO2vuVEYeWPidlfbktf823i8nW7bjeP+qwxxB5Kj+qRogbUCwYxWP5wcDy5yFpKiV1jAPZQegCApKzigRFrj9bS0Wtu6zI1dxgb2g11j/Q1TbrrDRzEYHzzGR6h9DwtTQyRw3Yt5lKKMsDd16S1w9IN1vfDeV+fhgPCQ2N4RVJWcbfWnHG6PClTvnN/7uY9WeSMUVk3zEUMEI6h9DymJqaeQV+L7CDNGEj22v2lFsuiDtEN+pHI0d5hojG8IimrWN1jbtGYmtTG+636WqWu+sFoVf3IlbvDF28PeSEGBgYDYaMxuJGUVfyo0wh/y0MmTAwMnxBOGoMDcOhzJ6H7iBFOiBCNgYERWESIxsDACCwiRGNgYAQWItIY0rKP4+RLPs7/aHHO/A8Pv/d+yjt/Spgdu23Wmxunz/zrH2KkUVOXvDT5g//z4rvPhKAzGOMcItIY0rKPV92KWnH95SVXXvxL2XN/Kvr3N0//2/Ssf4lOe/p52T/8buev//ePf/+P3/13TAyMEEBEGoNtxliw4709p3aW3JCnnN737qezMTEwQgCBNQZ1l8cJRQ31kAMAm81htTrsduAA4FcHftXapxrS2VBfvCJ/cqbA7/B2lC0WfrUhDttdoByL7mMeiJEpOZ+5j34PIaITCqkxSCOe870eFfWFlU2Xb6vauoYGhg39Q3q7w+Fw0NyqbR19LMSg7OUI+DNUymIYviDfIQ7bXSAdi2PqQOBbCwoCpjGqqqp0Oh3/C1ONeIWVTcahMzBZjQ3qARXpVm2nuFVvtFQ3tXZxEyMYDxTuivN7b5wYbHeBdSyOoU4wWgsKAqYxcnJyTp482d/fz10NacQ7VXrHqM2G80aPdpRII1T97QaTxe1WHemFbtUHLRrexGBa3gC3EU+qcB+mfCYuRjC3bfsWqk8hvO0uwI5Fjk/B47+o1shtlwjHooLuZ6TfIy2OIdsj8hcB0xg5OTm9vb0HDx7s6Ohgq8NmxDtWeF3fvqOwsslqcwAAiDTC4YDh7EH/wBDpVn3Uo7py6xHvpZSCaXljuMwom7ap+7epksLNByozKLX5hupTCG+7C7BjkfVToP8XGVgHzsGod6m4HYss+5cRcQwDH2cnYBojJycHANDf3y+TyZqbm5F12Ix4GWeujNYtO1V6x2C2P+wwP33s6Ue97X3DNtKtmnv77BMpT7T0dJ4suedNfKP2YNOcNx77sNnsEAg20L0LtOnDe6g+ah9oY4/at5Db7hCP0KcHhbpB5v2iTFcxVLbwdCyyfaaIR+QvAqYxIDEAAF1dXVu3btVqtchqSCPe/pwLQ1ckxwqvD+lseqO9fcDpVm0baB/R657c/2Rt+93+YesjjfG4/K63pRSykFbBmxEP0D8JDzD9GPxC9dH+ggpkuwuwY5HjgXP3RyEliJgYSjFfx2JIiREwjQEAGBgY4JgxIJhGvKSs4v6CX2ecudI7aNl+aqDguq6h3XxPZe7pHz5dVD44alX3mBpa9bVK3bHzd/wnBvBixKPkEee5PUWU1RufUH201YKnMkEspYJhu6MtRmCjgXEsIh6y16WUZ7dY++z9L0IQl1IB0Bh9fX3cGoMNSVnF3Scm7M+5oO4xt3Sa4BsMapW6KzcfSmLj8iqUJy44k7/EUEjZ//Aj8sx2XUNSIfU5VJ/HfCKU7S6wjkU+xACM5micoWY9KjH6z/J5IR+RfwikxuDzrRQS0E2RlFWs7DCuO9j7aUrvClnvwl29F36pF6uzwisVMYTAmL+OZkCw3zGYSMoqvt+qv3m35WpNc8X1B2W/1Msr6sRBAyYwMcQI5oJszBDRXik2F14ILu07MDHEA8YiLBDAfgwMDARE5MfAwBAPROTHwMAQD0SkMbCDD0M8EJHGwA4+DPFARBoDO/gwxAOBNQZ28IWJg2/cQUiNgR18LkqHkBhjdPCNOwRMY2AHnzc4d1LRGlGEi4Nv3CHUe6Wwg0+cDj7Upb0+HB5Pj61ZpgtPZAikHwM7+MLWwcd6ac6Hw6sCulnGcbEhwH4M7OBjFFI7SZt5PM8S0MGHvLT3h+Otgm/NiguB9GPADHbw0QuZ/RGzg49yaUyMAHq+sYMPVYhY4Xiu1BFLqRA6+Fgv7R8xfGtWXAikxsAOPrZCxjASm4MPeWn/ieFTs+JCIDUGdvCJ9mPG8BWC/Y7BBHbwYYgHItorhR18GOIB9mNgYCAgIj8GBoZ4ICI/BgaGeCAijYEdfBjigYg0BnbwYYgHItIY2MGHIR4IrDGwgy+0Dj7a1i++T4TX06O1jIh6EW4QUmNgB59rPIWSGNTtGAHc9O2xDYS548ZrZ8RFoYBpDOzg8wbnTipaI4oQO/iYm6YCxQyvm6l4niIWhHqvFHbwCeng8xx/FGZ4nsJ8eoxN5J4UpzwGpmvF89YoSy+plB5xj7szIUIg/RjYwSd2Bx8rMZineHl6ng+SpjGYG4fZbs3blltEZ0KEAPsxsIOPUUjtJG3m8TwrBA4+BDHYTmG7hOtPuOc49ZgcmF3i7Vjy0pkQIZB+DJjBDj56IbM/Ajr4WDQG4hSuPxMoucX5QHwmBvcKMBQIpMYA2MEndgefxz1SV0ZspwDPURsjlSJcVpwzBuutsT18js6ECIHUGNjBx1bIGJRCOfioEyD9zrhMf56zAUqDI1v2cmsKd5Q9Wt6LAzEkCKTGwA4+sX3niDFmCPY7BhPYwYchHohorxR28GGIB9iPgYGBgIj8GBgY4oGI/BgYGOKBiDQGdvBhiAci0hjYwYchHohIY2AHH4Z4ILDGCIyDz2PbGfIrU9ouDN/hukRAbHy0X98pO7f4nOv8QV7EIVciA0JqjIA5+ODYom5NYI4z/wYTyqcx1lbce0UwMcQLwTRGIB18VGLwH2c+AO7fk0r527NZW2E0gIkhSgReY1RUVOzcuZPtaFAcfIwZI0ampK+vpAr3YKKsZkjPXkwMucWN3AVIc9oRBNxuTdsUS61NvbpHIQn3dkAlo/MxnqcwX9aPiRFCBFhjXLp06bnnnnvmGbQ+DpaDD2nNcRZ67vT2HFQUUjnPcNog3NXcfKCerHC/xsBdG1nI0lNq69RT3JtNqTcCHaaYGKFCIDUGZMWCBQs4iBEUBx/HGKRt8if/6jPGJWW17/HXmUE7lBWWOXYB1xrJ7eKms8Fj6NOAiRFaBExjkKz46KOP2IgBguTg84UYZJ6gEoWDGMzJgzl7+EgM2kEUMdBqBBMjhAiMxqCygpsYIBgOPl+JQf2/N2J4NMOxanI6ahiF5ClKmZTZDHrGoKzqAABAIaNRERMj+AiMxti5c+czFGzfvt2nTvjr4POFGJRFiue4RBGD0TQ59D1WO5SR7VFIIQZ1TUa3tnkQA3is4GIwMUIMUeyVCkMHH8sPI3jIRgpEtFcqrBx8mBgRDhHtlQorBx8mRoQD+zEwMBAQhcbAwBAbRKQxMDDEAxFpDAwM8QBrDAwMBMJbY2g0mgt0tLW1Cd0pjEhAuGoMuK/kwoULAwMDer1er9cPDAy0tbWVlpb6wg32d7kGD4jQGRiiQ1hqDNL6V0pHcXGxXC6Xy+VFRUWFhYXnzp07d+5cVVVVVVXV0aNHUS253x0Y5OGKX1IYZhBeY/gTvK+4uNjjqM1mM5lMo6OjWq22u7tbrVZ/l9nb0dGRkJCAaoztnd4BByZGmEF4jeFP8D65XA4AiFqQc722ZUmS7Z3N7dNXl0ctyOnr6+vs7FSpVN9mDX1+oLe9vd0XYpBv86fsAaRsFHTWZMbac9f0iBznsa0Q+XJ8dPA5DKEgvMbwJ3hfYWEhzDAnCqVS+Z/pQ0cug2V7e5VK5Q8//IBqGLmUogYu8Yh4gnQxuelEnkTuhqW0g2Yg7RSFZ3gyDKEgvMbwJ3hffn6+3W53zRj2d75vn766QqVSNTU1Ld83tCRhaNWe9nnxXY2NjX/7299QDVPFN1skF+4YvevTeQAAE55JREFUWa5CvmHsKHnmKTRTOYaQEF5j+BO8Lzc3lzpRtLe3P3r0qKGh4cNdg3O+677dOvLBhquxG5rq6uqWL1+OatXb2/y9E8NVg3cYOzoxEBNEUN5zguEjRKExwFiD9508eXJ4eJhUFE1NTffu3Xsvvnf+jqE/rqmJXlb83rc1Mz69evv27Xnz5qGa9BrmwmMpxR1rz6Mtb8RAnOIEKvojRkghCo0x5uB92dnZcKJQKpUNDQ137tx5+7vW2V83vvHlnZmfXX91dUVMXMm0ZQU3btx44403UA3wiP+CCB5HU9XMSPWopRQ1xhxSfLst41h7iwGi0BhjDt6XlZVFThS3bt26c+dOXV1dXV1dbW1tdXX1jRs3rl69evny5V9++WXatGmB6zL+7jXyIbzG8Cd439GjR1NTU3/66aeNGzeuWbPmww8/nD179rRp0yajELguY2JEPoTXGGEITIzIh/AaAwNDhBBeY2BgiBDCawwMDBECawwMDASwxsDAQCC8NYa6rcXTwdfyQOhOYUQCwltjoB18PnCDGRKPsyL+knbcILw1Bh8HX35+fn5+vlcHH3VXFKoa3qQxviC8xvDnl+/i4mIzBTqdbmhoqK+vT6PRwA1U9fX1NTU1VVVV/jn48C964w7Cawx/9krJ5XKz2QyXUoODg/39/YryW6flV4/kXkjJLPhhb2ZlZWVZWdm+ffu8E8NzLzliZx/jBf0eTj0Px5/7qEzGjL7HMOthN5+YILzG4OPgY0NhYaHZbH7U1p1XUjMwMCA7VGizAQCA2WweHBptaun+/PuU3NzcHTt2sDv4mAoD6cVDTSzcTj3KUcrOdPegZ92jjt18IoDwGoOPg48N+fn5ZrO54MLtv245sHnvie3JpwxG09CwrlXde++BWl5x989xm7Ozs7dt28bu4GN4hri9eP4c5bAoYTefyCC8xuDp4EMiNzdXr9e3d3TNWbT+8ePHf91y4LFmIOts5b4j5+OTTn37U+Z7n3yfmZm5ZcsWrw4+tzeI24vnz1EvxMBuPhFBFBoD8HPwMUF18EFT65xF62e8/9mM9z+bOnfl1Lkrc3Jy0tPTN2/ezMPBx2Gs8/T0+XHU8x0KlGrYzSciiEJj+OPg02q1Go2mpaWloaGhtrb22rVr5eXl58+fz83NzcnJOXToUHJy8qZNm/g4+NyjldOL58dRTwqxiG/s5hMeotAY/jj4urq6bt26VVRUdOLEiczMzPT0dPgdVHx8/JYtWzZv3rxp06YNGzYE1MGHEfkQXmOEoYMPI/IhvMbAwBAhhNcYGBgihPAaAwNDhBBeY2BgiBBhrzEKKx8WVT4srFQWVNYXVj4sqnxwtrzh9IU7OYU3HihxdCWMMSLsNUbhlXoHAA4HAA7gAHZgh1lw8Ezl1NhVmBsYY0PYa4z8ikYA7MAB7MDhADALbDZbcnbphasNr8Qux9zAGAPCVWOQL3jOvXAPADtZbgcOi9VuMTuSskr/EBsnif1k6tyVAvWRH0hvII7NJyaEpcYgY/ABAHIUtwEAszZ0/uGzFrsdHMu7dvD0lRG9RWswJ2XJk7KKJW/HCdpZbmBvoEgRfhqDGoMPAHC86AYAdgew2+12i9VusFiHR0H/qLV7yNrVa07KKpbEfiJshzmBvYEiRdhoDGQMPgBARt4VhwPM+EYz9fMWndmelffL4ZNXUjIvJGTIr7erTz+4vLt62+abS45fqUM2y9iqh4yvxxJ0zw0OOx49ch/NyufhDUT4OmJkMswcQRAeGoMtBh8AIP3URbMdmMyOUQPQ6u39o9auAfPjHuPl5geylvVVuuqCjtLP8/bNSCiRVZ9nvwJtzzkqvh6zkAR6Dzk6cp+nlY913zvF3oqJIQDCQ2OwxeADAKRml+lN9pkbOqP+puzXWo+dvXrwdEXysZLP0o+sufHWrpqvvi8oXCHTxBxIX1L+BaJpT0c3Kr4eutAFb64jVCOo+JRUGxPtapgYAiBsNAYyBh8AICVLPmqwD45Y+7WWzj6zusf8sMPQ2G78Jv3R3P2xs48vXZp4f8GO9mcT5/1j8suejbpHMDkYUfH10IXMRtAlmBjhiLDRGAAVgw8AkJRVrB2xztjYJflc1a4xZ+VXHjxdkZx18Yt0w+JtZTNk85/LXDXzu8IZqxb/dmO058kIR523+Hq0Qi47HipyHz9i4KWUCBAeGoMDKZnFXQNmTa+hVWNuVhvrW413lcaapqGkwu6FuwzTtsT/c8J/TP7rJ6+vzNt/hs1TTRAxUillxmDE12Mt5GHH8xqfEv3+EdfJWHwLg/DQGBxIySxW95hVGtMDtemeauS2Ul/zYPRqvf5ijfbbDOXzX2+MXr14Rlzmgm+K+bXHI1xlKMHykgSMYCNsNAYbUjKLH2rMqVkl+zIV+44VJx4vSsoqTcksTcoq3pdZ4vvvGOIiBusrEjCCjHDSGEjsyyqVxK6Iil0uiV0ePSdOErvildjlktgV0XNXRM9dIXk7ThK7wpf2xEAMz/cpYIQeYa8xMDCCgbDXGBgYwUDYawwMjGAg7DUGAOAyOyoqKsxms9AdxAg/RILGuHz5Mtuh6urq0tLSkdGRUPYHIwIQCRqjoqKC7VBVVRUAoKysbHh4OHQdwgh/hKvGoG4PuXTpElu1srKykpKSkpKSsrIyjtbEYRfC26JEhLDUGFQHHwDg4sWLbDWtFovFYraYTVzEUMpi3FtCBAQmhoggvMbw9d21Hg4+AAAc9KqWlrTUZKvFAgC43O50gaelJqtaWswmY0lJCVuDcDOrCN62j4khIgivMXi+7ZzNwQcAKCkpgazQGfTpNfqD9+1fyEffTev9MK3HYNBDbrATw8UI5mZvH3x8lA22ruHN7Q10hUxitI+JIQ4IrzH4xODjcPABAORyeVpqss1mPXZTu7nctCBL+8eEzmc2Nv/mi4ay6802mzUtNVkul6ObpkVSou+W9c3HB20XzMh5KG8gJcvi5sMQGMJrDD4x+DgcfACAoqKixMREm816oKB+0geVf7ew/Hdf3n0vTfP+4YEDBfU2mzUxMbGoqAjZMpUNlJ2svvv4AM27Sv6XxRvodQs6hsAQXmPwjMHH5uADABQUFKhaWhJ27x7UDr266f6kpdde2a357Lx56bGRQe1Qwu7dqpaWgoICVKvuwUtf9/ju4wN0YnjxBmJiiB2i0BiAXww+JCsAAHl5ecAlvqsaB1/58eH0Xep3Unsv3RuCAoOs4wnPoUjlgK8+PvpSCu0NxMQIG4hCY4w5Bh9Ebm4uzFitltERndGgNxkMJqPRbDJZrRaPOlQwR6JrwPvq46OH74uRKVm8gZgY4QJRaIwxx+CDOHToUEDqUCAGVwaGkBBeY/gTgw9CJpMFpA4FmBjjHcJrDP+xffv2gNShABNjvEN4jeE/NvKD0N3ECCcIrzEwMEQI4TUGBoYIEQkaAwBQWNnkkc6W158qvXO86GbxL/VC9w4j/BAJGgMAUFjZxCx0AJBx5rIkNm5XGurXPQwMdkSIxjh3uZH6318d+JWqX2W3O1KOl5ZV1Uti4346gLmB4QPCVWNQt4fYbI7+QecvIU+lPaXqVxHJxFNpT9lsjqSs4qlzP4EJ1Qxtr5S/Hj7GRnOM8AVPjbFG6H7SQHXwqbXqp489TaQRaq1arVVPSJ7w5P4niTSiWnXLbLEP6qxJWcWQHqiWPIIY+TqgWU5XymSM3bgY4QVJ7BpXWgszTGKsERUxqA4+m80BKaEzmDbe3DgpbdLE1Im9o30TkidMTJ1oMNl7B62afhiJDxmikm3/Ek/Q30/ueTYmRhhDErvm2WnzSXogNYYoiIF08EFiAABG9SZYbWLqxCdSnpiQPKG1r21wxNrZZ1Z1m3gRg2qwQETQYxZSlmHOfYdUHjCPwg2Irqrs5j4vhkHPcH+0linwqMeIEojBCepcAfMojTFHYGKwOfhsNsfTx55Wa9WjeuPhpsOT0iZNSJlwtjb/iZQn1ANdmj6TqsvYrDZwEoMpMRRsEfRQhdQ5wTn42AJoMKYPlLnPi2GQxmTSQstomeEwRPiqMLggmbMGJjj+JXMQS6m1YiAGm4NPrVUTaQRcUFnt1if3P3lHfVdntHdrLa2dxia14b5Kz2vGIMcSMlCY9+hhLihlMQTzKL0ml7mP0zBIfQ86ZS5C9YEZ/Qwv7HwASQw4/lHEmLNGcGIATgefzeZQa/otVkeDsqO2vuVEYeWPidlfbktf823i8nW7bjeP8tMYrtHkJzHopg4EMfwJ/If4hoAfMchivJTiB+pcAfOexIiesyZaBMQA7A4+AEBSVvHAiLVHa+noNbd1mZo7jA3thrpH+pom3fUGfsRgXTV5RiBGh9VTyKiD2LXIYQkjhlo18TYMevAAeRXEyxrIzuF5gw+i56yRxK6Fgx/mERpDJMTgQFJWcbfWnHG6PClTvnN/7uY9WeSMUVk3zE9jUAYMIoIeutB5Pl1RU0UGasHjT+A/ZlQZDmOgx1cDWHv7AJIScPxHIzVGWBBD3WNu0Zia1Mb7rfpapa76wWhV/ciVu8MXbw+xE0MkwPYP0YE6V6CJIZ6lFAeSsoofdRrhb3nIhImB4ROoc0W0yDUGB+DQ505C95EDmBiiQ4RoDAyMwCJCNAYGRmARrhrDZndcujeQXNwen9uCkyApubj90r0Bm90h9FgICsJVY5yv6ZXX9ndorSMm7zH4RkwAp4CnDq1VXtt/vqZX6LEQFPDUGKuF7qcndp1rHdDbBwygX88rBl+/HuAU2DRgAAN6+65zraH83EOG6DmrYYLjP3rOaqTGEB0x4nNbhk2gTwf6dHxj8MHKOAUwDZtAfG5L6D71EIIkBhz/CGLAUqH76YmaKGLICHpGQc8o3xh8sDI9KZZQfvneVseoUCeLRpbzTieWE8RyxRhPP+v+ufqEs7d8OkNW41nfp0Rrc8gYycQg5wqYDwNi1EQRNVGE1gC6RkDXCN8YfLAyPSkWEzFb74CuEXBtZwwxVXYNUcePdEcWPVW6eKrzEj6fS0izXfmtubTeciayGs/6PiVam1pDJBODnCtgPtQaw9d319ZEESBNWhNFaPWgcxh0DvONwQcr05NiMRGz5Q4zH5hUtSMmaocS/uvz6blSYqqsirW3HImsFvg78mhTq49kYgisMXi+7bwmigAuVkBi9OmAehCoB/nG4IOV6UmxiIjZUuuRVywiYhZ9HEMQ0kx3oXKLxLmsWXTaVfm0LMpVUrndubUvarvS1bhyiyRmSy1Q18qiJLJK6hVdJ7oqsxVSW2OrBtS1zhKCkGYybsR1d85bcJ51WkpIZJWDIPNj12LtYwXzEqj7orXZp4t8YgimMfjE4CNnCZIV8bktPaNApQUqLd8YfLAyPSk+ImK+vw1UWnB5ewwhkV12FhJTtitpFU5LiWUK+omEs/5pKUHWPy0lCOkRWOe2bIqzQeX3EudVaCfelk1xXh1ZCE8kCIL46DTyovBC7ltQnZZO2a6klFAOubstPeL8F/kcvN4Xrc2e0UgmhsAag08MPpISTnoAEJ/b0j0KWvpBSz/fGHywMj0pPnKLb+khd2HM5mp6vlo2hSCmxCtbOOrQ8+XxMWT98vgYYqmCURkcWkp8dJKt0JWqZVMIZjVax9xYqqBUozXrTCelBEFp/6TbS8g4BZmntdkd0cTgoTFmB50YwFsMPvekAQAAID63pXMYNPeB5j6+MfhgZXpSfEjEbLrJUUircCE+hiCID09y1CHzig8JD0gzPCsrN0mYrZGF7nQhPoZYqkBf6KZssrNlZv9Rd3dS6roF6rnKTRLmKWz35W6zczhyiTF7NUxw/EfPRmqM4BODTww+khUAgPjclo4h8KAHPOjhG4MPVqYnxV+ImI03OAo9K5Rui5m8Tclex5U/ISWiZaXuNpUbo4m/nIAViMnblA96wIMbssmENL2HpfCEzNWmcmM0wX5Ryrme/UdmpOnOfymdvCGb7FmTLU97IB1DkU8MOP4RxIClwevB2GLwxee2PB4EDd2goZtvDD5YmZ4U84mYDTc4Cl35HPdPCgfY6lDyB5YQL/+opDZb/GMMsUQBK8xf4lS083PcZ6EKXViiYO1YN2i4IXuZVpM85JFRboh29qr4xxgiWlbcrdwQTRAEQURL50d7nMKWpz2xx4ORTAxyroB5AYgxhhh88bkt7VpwXwPua/jG4IOVhU6K+UTMN1V8CsMgtWsjmRjkXAHzodYYY4vBF5/botKCOg2o0/CNwQcrC50UHxAxX1fxKQyDpIpoYgisMcaGvUVtTd22+xpwt5NvDL67nUAESfEBEbO+ik+h2NN9DWjqtu0tagvBxx16CK8xxobi2r5ztwaUvXaVlm8MPtTvGDiNPSl77eduDchvR+i2c8E1xthgttqLbvXuOtcquF9n3KZd51qLbvWarXahx0JQwFNjrBK6nxgYIUX07FUwwfEfPXsVUmNgYmCML5DEgOMfQYyo2auiMDEwxhmiZq96dtp8OPhhHhMDAwNEzV4liV1LEgOtMTAxMMYbqHMFzCA0BiYGxngDda5AEwMvpTDGIbDGwMBAAGsMDAwEsMbAwEAAawwMDASwxsDAQICfxngLEwNjfCHqrVUwwfEf9RZSY2BiYIwzkMSA4x9BDFgqdD8xMEIK6lwB80xiSKPeYg2wjYERkYh6SyqJXQsHP8wjNQYmBsb4AkkJOP6j3pIiNQYmBsb4AnWuQBLj/wfE4ZgnG0hhhwAAAABJRU5ErkJggg==)
Step 2
Now let us divide the main shell xaml into regions and mark them with regional names.
<Window x:Class="Prism.ModuleExmaple.PrismAppShell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://www.codeplex.com/prism"
Title="PrismAppShell" Height="900" Width="1200">
<Grid x:Name="LayoutRoot">
<DockPanel LastChildFill="True" HorizontalAlignment="Stretch" Name="dockPanel1" VerticalAlignment="Stretch">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Background="#FFCCD4F8" Height="100">
<ContentControl prism:RegionManager.RegionName="RibbonRegion"></ContentControl>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" Background="#FFD9E1EF" Height="100">
<ContentControl prism:RegionManager.RegionName="StatusRegion"></ContentControl>
</StackPanel>
<ScrollViewer>
<StackPanel Orientation="Vertical" DockPanel.Dock="Left" Background="#FF50576F" Width="200">
<ContentControl prism:RegionManager.RegionName="TreeRegion"></ContentControl>
</StackPanel>
</ScrollViewer>
<StackPanel Orientation="Vertical" DockPanel.Dock="Right" Background="#FF677BA7" Width="100">
<ContentControl prism:RegionManager.RegionName="AlertRegion"></ContentControl>
</StackPanel>
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FFC0DBF2">
<ContentControl prism:RegionManager.RegionName="BlotterRegion" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></ContentControl>
</StackPanel>
</ScrollViewer>
</DockPanel>
</Grid>
</Window>
Step 3
In step 3. let us create few individual modules such and load them on the regions on the shell as we defined before. Also in the shell xaml on the top we used a ribbon control and defined the RibbonRegion there, a TreeView control on the left for TreeRegion, a TabControl in the middle for BlotterRegion. Bottom and right (StatusRegion and AlertRegion) we kept as ContentControl still.
<Window x:Class="PrismApp.Shell.PrismAppShell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://www.codeplex.com/prism"
Title="PrismAppShell" Height="900" Width="1200"
xmlns:my="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon"
>
<Window.Resources>
<DataTemplate x:Key="crap">
<StackPanel Width="100" Height="18"></StackPanel>
</DataTemplate>
<Style x:Key="TabItemStyleKey" TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding Path=DataContext.ViewTile}"></Setter>
<Setter Property="HeaderTemplate" Value="{Binding Source={StaticResource crap}}"></Setter>
</Style>
<Style x:Key="TreeItemStyleKey" TargetType="{x:Type TreeViewItem}">
<Setter Property="Height" Value="Auto"></Setter>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="BorderThickness" Value="0" />
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<DockPanel LastChildFill="True" HorizontalAlignment="Stretch" Name="dockPanel1"
VerticalAlignment="Stretch">
<my:Ribbon prism:RegionManager.RegionName="RibbonRegion" DockPanel.Dock="Top"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" Name="ribbon1" Height="150"/>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" Background="#FFD9E1EF" Height="100">
<ContentControl prism:RegionManager.RegionName="StatusRegion"></ContentControl>
</StackPanel>
<ScrollViewer>
<StackPanel Orientation="Vertical" DockPanel.Dock="Left" MinWidth="150" MaxWidth="200">
<TreeView ItemContainerStyle="{StaticResource TreeItemStyleKey}"
prism:RegionManager.RegionName="TreeRegion"
Name="treeView1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
BorderThickness="0"
/>
</StackPanel>
</ScrollViewer>
<StackPanel Orientation="Vertical" DockPanel.Dock="Right" Background="#FF677BA7" Width="100">
<ContentControl prism:RegionManager.RegionName="AlertRegion"></ContentControl>
</StackPanel>
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FFC0DBF2">
<TabControl ItemContainerStyle="{StaticResource TabItemStyleKey}"
prism:RegionManager.RegionName="BlotterRegion"
Name="tabControl1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" Width="Auto">
</TabControl>
</StackPanel>
</ScrollViewer>
</DockPanel>
</Grid>
</Window>
Cash blotter module registers view like this.
public class CashBlotterModule
: IModule
{
private
readonly IRegionViewRegistry
regionViewRegistry = null;
public
CashBlotterModule(IRegionViewRegistry
regionViewRegistry)
{
this.regionViewRegistry
= regionViewRegistry;
}
public void Initialize()
{
this.regionViewRegistry.RegisterViewWithRegion("BlotterRegion", typeof(CashBlotterView));
this.regionViewRegistry.RegisterViewWithRegion("TreeRegion", typeof(CashItemsTreeView));
}
}
And bootstrapper loads module like this. (IN next section
this will be worked on further to load using container and decouple.
public class BootStrapper
: UnityBootstrapper
{
protected
override System.Windows.DependencyObject CreateShell()
{
return
this.Container.Resolve<PrismAppShell>();
}
protected
override void
InitializeModules()
{
base.InitializeModules();
App.Current.MainWindow
= (PrismAppShell)this.Shell;
App.Current.MainWindow.Show();
}
protected
override void
ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog
moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(PrismApp.Module.Cash.Blotter.CashBlotterModule)); //
Seems like as soon as you add a new module, internally seletor module adopter
(since blotter region is on tab control), automatically adds a tab item)
moduleCatalog.AddModule(typeof(PrismApp.Module.Deriv.Blotter.DerivBlotterModule));
//moduleCatalog.AddModule("CashBlotterModule",
"PrismApp.Module.Cash.Blotter.CashBlotterModule");
}
}
In above code, inside ConfigureModuleCatalog the module
loading will be upgraded in the following section.
When we run now, the skeleton application comes up like this
![](data:image/png;base64,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)
Step 4
In step 4, we have
After all the above steps in step 4, our skeleton app looks like the following.
![](data:image/png;base64,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)
When we run now, the skeleton application comes up like this
Step 4
In step 4, we have
- Replaced the wpf datagrid with devexpress grid control, wpf toolbox ribbon with devexpress ribbon control.
- View Injection - done view injection from cash blotter module and ticket module and as well from derivatives blotter and ticket module.
- Injected views in desired prism regions on the shell, i.e. on BlotterRegion, RibbonRegion, TreeRegions.
- Model - connected to database for fake trade data.
- ViewModel - created a number of view model classes in order for the views to bind to trades data.
After all the above steps in step 4, our skeleton app looks like the following.
How far have you gone in this implementation? what mechanism you are using to push values to all the connected blotters from the server
ReplyDeleteHi Milind,
ReplyDeleteYou should be able to have full fledge production quality applications based on the above structure. However for this blog I just did with play data.
For a real system, you can use any number of data sources, it does not matter. You can use Rx (Reactive Extension) if you desire push based data, or in memory chached data (with or without commercial in-memory product) and then register event handlers from blotter-view-models to get updates for blotter. View models can listen to message queues, or retrive data from databases or have LINQ querries, object data sources, anything you would like.
For simple straight forward way, you can directly get from database (for this play application that is what I am doing, I am getting dummy data from my local sql server instance).
Thanks, Can you please share the sample code for this app?
DeleteI was hoping that your blog article would be a good intro to Prism, but in VS2012 and Prism 4.1 I am getting a syntax error on your CreateShell method. The return line underscores the Resolve() method and states that it cannot be used with type arguments. Any ideas? I will continue on with the project for background purposes but would really like to run the program.
ReplyDeleteUse TryResolve()
DeleteHi Gerald, could you please upload the source code? I am new to PRISM....
ReplyDeleteThanks!
I'm fairly knowledgeable with WPF and MVVM. I followed the above steps (up to step 3) but the solution won't compile. Can you provide the source code?
ReplyDeleteHi,
ReplyDeleteWhat about all the code source please ? Could you send it to me all the source code please ?
Thanks, Can you please share the sample code for this app?
ReplyDeleteGreat article. I am interested in module navigation and dynamically ribbon population based on modules loaded. Any implementation hints?
ReplyDeleteThanks!
How do you connect your viewmodel to view in this scenario. I have a similar structured project where I have a main project with a xaml file that contains contentcontrol region and another project as a module where I define a UserControl. I load my modules using a app.config file rather that coding in Bootstrapper. I am able to successfuly display usercontrol in the contentcontrol using RegionManager.RegisterViewToRegion(...) and I do this in Initialize method in a class that implements IModule interface. No the trouble I have is how do i tie or register this user control to a viewmodel that is in same module as the user control. I tried few different ways but unsuccessful. I am using PRISM 6.3. Any thoughts or suggesstion is greatly appreciated.
ReplyDeleteNicely explained article by the way...
ReplyDelete