לאחר שהכרנו את הספריה של Prism ולמדנו כיצד להפעיל את האפליקציה שלנו
באמצעותה. נמשיך בפוסט זה ללמוד Regions ולמה הם משמשים אותנו וכיצד נוכל לנהל אותם.
מה זה Region?
ה Region משמש ב Prism כ Placehoder עבור תוכן דינמי ש"נזיק" עבורם
כלומר, ה Shell שהוא כפי שאנחנו יודעים הוא המיכל של האפליקציה והוא
לצורך הצגת תוכן יכיל Region אחד או יותר.
כל Region מקבל View עבורו.
על מנת לשמור על מדולריות ה Region אינו מכיר את View והוא אינו תלוי בו.
את יצירת ה Region ניתן לעשות או בקוד או באמצעות ה XAML.
חשוב לציין, Region לא חייב להיות ישירות על ה Shell
הוא יכול להיות מקושר ל View.
בנוסף, Region יורש מ IRegion
Region Manager
כפי שציינו תפקידו של Region Manager הוא לנהל את Regions במערכת שלנו,
והוא עושה את זה באמצעות שמירה של רשימה של ה Regions.
על ידי attached property בשם RegionName שבו יש לתת שם ל Region שם,
ובכך באמצעות השם של ה Region – ה Region Manager יכול לספק מידע
לאותו Region.
RegionAdapter – ה RegionAdapter אחראי לקשר בין ה Region
לפקדים ה UI, מה שנקרא Maping.
Prism מספק מספק לנו 4 RegionAdapter ב"חינם":
ContentControlRegionAdapter
ItemsControlRegionAdapter
SelectRegionAdapter
TabControlRegionAdapter (רק עבור Silverlight – לא רלוונטי החל מ Prism 5).
במידה ואף אחד מ RegionAdapter שלעיל אינו מתאים לנו
נוכל ליצור אחד כזה בעצמנו.
RegionContext – דומה ברעיון שלו ל DataContext שאנחנו מכירים ב xaml
כך זה מאפשר לנו לחלחל את data לתוך ה "visual tree", כלומר – ה RegionContext זוהי בעצם
טכניקה שמאפשרת לנו להעביר מידע בין קונטרול אב לבין קונטרול בן. וכמו תמיד את RegionContext
ניתן לבצע או לידי קוד או בתוך ה xaml.
דוגמה:
זאת דוגמת המשך לדוגמה שנעשה בפוסט על Bootstrapper & Shell
ניצור 2 Regios:
- Menu Region
- Person Region
בשלב הראשון שתהיה לנו אפשרות לשלוף את שמות ה Region במקום באפליקציה, לשם כך ניצור את RegionNames.cs בתוך תיקייה בשם Infrastructure:
public class RegionNames
{
public static string MenuRegion = "MenuRegion";
public static string PresonRegion = "PersonRegion";
}
בשלב הבא ניצור את Regions ב Shell, לצורך כך נכתוב ב xaml של ה Shell:
<Window x:Class="PrismDemo.Shell"
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"
xmlns:inf="clr-namespace:PrismDemo.Infrastructure"
Title="Shell" Height="300" Width="300">
<DockPanel LastChildFill="True">
<ContentControl DockPanel.Dock="Top" prism:RegionManager.RegionName="{ x:Static inf:RegionNames.MenuRegion}"/>
<ContentControl DockPanel.Dock="Bottom" prism:RegionManager.RegionName="{x:Static inf:RegionNames.PresonRegion}"/>
</DockPanel>
</Window>
אנו רואים שיצרנו 2 ContentControl שיחזיקו את Region שלנו ולכל Region נתנו שם שיצרנו RegionNames.cs.
בשלב הבא נרצה שה Region יציג מידע, לצורך כך אנחנו צריכים View וכל View שייך ל Module מסויים, בשלב זה לא נדון נרחיב על View & Module אך לצורך הדוגמה ניצור תיקייה חדשה בשם MenuModule, ולתוכה ניצור UserControl חדש בשם MenuView וניצור שם כפתור בודד.
לאחר מכן, ניצור באותה תיקייה את Class חדש ב MenuModule.cs שיראה כך:
public class MenuModule : IModule { private IUnityContainer _container; private IRegionManager _regionManager; public MenuModule(IUnityContainer container, IRegionManager regionManager) { _container = container; _regionManager = regionManager; } public void Initialize() { IRegion region = _regionManager.Regions[RegionNames.MenuRegion]; region.Add(_container.Resolve<MenuView>()); _regionManager.RegisterViewWithRegion(RegionNames.MenuRegion, typeof(MenuView)); } }
זהו אם נריץ את האפליקציה נראה את הכפתור שלנו.
מצורף לינק מלא לדוגמה שלעיל
פוסט מצוין! הכי טוב שיש על הנושא הזה בעברית.
אהבתיאהבתי