新建空白模板(Prism)
新建好后會有自動創建ViewModels和Views
在"MainWindow.xaml"文件里面標題去綁定了一個屬性"Title",而"MainWindowViewModel.cs"里面繼承一個非常重要的"BindbleBase"(prism框架里面非常重要的)。所以我們直接運行界面就會顯示Title的文字信息
往下看
在"MainWindow.xaml"文件里面還有這樣一段內容,這里就表示
你定義了一個名字叫 ContentRegion
的區域,后邊你注冊的界面就會繪制到這個區域。
<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><ContentControl Grid.Row="1" Grid.Column="1" prism:RegionManager.RegionName="ContentRegion" /></Grid>
稍微添修改一下把界面Grid分成2行2列,并且把定義的區域放在 第二行二列里面(Grid.Row="1" Grid.Column="1"?)
private string _title = "Prism Application";public string Title{get { return _title; }set { SetProperty(ref _title, value); }}private readonly IRegionManager _regionManager;public DelegateCommand<string> DelegateCommand_Open { get; private set; }public MainWindowViewModel(IRegionManager contentRegion){_regionManager = contentRegion;DelegateCommand_Open = new DelegateCommand<string>(OPen);}private void OPen(string obj){// viewName 可能是 "HomeView", "SettingsView", "AboutView" 等if (!string.IsNullOrEmpty(obj)){// 導航到 ContentRegion 中指定的視圖_regionManager.RequestNavigate("ContentRegion", obj);}}
而"MainWindowViewModel.cs"里面我們定義了一個?DelegateCommand<string> DelegateCommand_Open?可以接收一個 string
參數的命令。斌且在構造函數里面 引入一個接口IRegionManager contentRegion 是為了拿到我們通過接口注入的東西。
我這里定義了一個用戶控件,并且在界面上面放了一個,TEXT方便顯示效果
在APP.XML.CS里面我加了這樣一個注入 這樣就代表我們手動綁定?Form_1 和上下文?MainWindowViewModel 這里要解釋一下為什么手動綁定這個?因為之前我們在MainWindowViewModel 里面的構造函數里面綁定了下面兩個 我們注冊的regionManager 就可以通過接口拿到
public MainWindowViewModel(IRegionManager contentRegion){_regionManager = contentRegion;DelegateCommand_Open = new DelegateCommand<string>(OPen);}
再通過??_regionManager.RequestNavigate("ContentRegion", obj); 去繪制到ContentRegion指定的區域 繪制的內容是通過我們注冊的名稱 也就是 Form_1
我們去給綁定一下
這樣就實現了點擊按鈕就會把參數傳入到 binding綁定的方法里面? 我們binding綁定的是open方法
也就是我們把Form_1 傳入到了Open方法里面然后通過?_regionManager.RequestNavigate("ContentRegion", obj);向指定區域中導航一個視圖
點擊按鈕運行效果
我們看到的這種也是通過基礎的導航綁定注冊來實現的
英語比較差記一下:
?IRegionManager :“通過引入這個接口可以拿到我們在 App.xaml.cs
里面注冊的窗體
DelegateCommand: 給XML界面提供屬性綁定的 這個命令去綁定一個方法,按鈕或者其他觸發后就會去調用這個命令所綁定的方法可以帶參數.
?regionManager.RequestNavigate:向指定區域中導航一個視圖,它告訴 Prism:“請把某個已經注冊的視圖加載進這個區域中
? ?<ContentControl? prism:RegionManager.RegionName="ContentRegion"/>:我們在界面上放置了一個區域,名字叫 ContentRegion
。