рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ
рдкреНрд░рд┐рдЬреНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЗрд╕рдХреА рд╕рднреА рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдХрднреА-рдХрднреА рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХреБрдЫ рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рдлрд╛рдбрд╝ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд░реАрдЬрдирд▓ рдореИрдирдЬрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ
рддреБрд░рдВрдд рдореИрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рджреВрдБрдЧрд╛:
xaml -declare рдХреНрд╖реЗрддреНрд░
<Grid x:Name="LayoutRoot" xmlns:service="clr-namespace:TestProgramm.Services"> <DockPanel LastChildFill="True"> <ContentControl DockPanel.Dock="Top" service:RegionManager.Region="TopPanel"/> <ContentControl DockPanel.Dock="Left" service:RegionManager.Region="LeftPanel"/> <ContentControl service:RegionManager.Region="Center"/> </DockPanel> </Grid>
рдХреЛрдб- рдордзреНрдп рдХреНрд╖реЗрддреНрд░ рднрд░реЗрдВ
SimpleIoc.Default.GetInstance<RegionManager>().Set("Center",SimpleIoc.Default.GetInstance<HomeView>());
рдпрд╣рд╛рдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореИрдВ MVVM рд▓рд╛рдЗрдЯ рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╣реЛрдЧрд╛, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдХреНрд╖реЗрддреНрд░ рдкреНрд░рдмрдВрдзрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public class RegionManager { #region private Dictionary <String, DependencyObject> Regions = new Dictionary<string , DependencyObject>(); #endregion /// <summary> /// /// </summary> /// <param name="sender"> </param> /// <param name="name"> </param> public void Unregister(DependencyObject sender, string name) { if (Regions.Contains(new KeyValuePair<String, DependencyObject>(name, sender))) Regions.Remove(name); } /// <summary> /// /// </summary> /// <param name="sender"> </param> /// <param name="name"> </param> public void Register(DependencyObject sender, string name) { if (sender.GetType().GetProperty( "Content" ) == null ) throw new ArgumentException(); Regions[name] = sender; } /// <summary> /// /// </summary> /// <param name="name"> </param> /// <param name="element">, </param> public void Set(String name, object element) { if (Regions.ContainsKey(name)) Regions[name].SetValue( ContentControl.ContentProperty, element); } #region Region public static String GetRegion( DependencyObject obj) { return (String )obj.GetValue(RegionProperty); } public static void SetRegion( DependencyObject obj, String value) { obj.SetValue(RegionProperty, value); } public static readonly DependencyProperty RegionProperty = DependencyProperty.RegisterAttached("Region" , typeof( String), typeof(RegionManager ), new UIPropertyMetadata(PropertyChanged)); public static void PropertyChanged( DependencyObject sender, DependencyPropertyChangedEventArgs e) { if (e.OldValue != null ) ServiceLocator.Current.GetInstance<RegionManager >().Unregister(sender, e.OldValue as String ); if (e.NewValue != null ) ServiceLocator.Current.GetInstance<RegionManager >().Register(sender, e.NewValue as String); } #endregion }
рддреИрдпрд╛рд░ рд╣реИред