3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
在Prism中,您通常會(huì)將選項(xiàng)卡控件設(shè)置為一個(gè)區(qū)域,這樣您就不必控制綁定的選項(xiàng)卡頁面集合。
<TabControl x:Name="MainRegionHost" Regions:RegionManager.RegionName="MainRegion" />
現(xiàn)在可以通過將自身注冊(cè)到MainRegion區(qū)域來添加視圖:
RegionManager.RegisterViewWithRegion( "MainRegion", ( ) => Container.Resolve<IMyViewModel>( ).View );
在這里你可以看到Prism的特色。視圖由ViewModel實(shí)例化。在我的情況下,我通過Inversion of Control容器(例如Unity或MEF)解析ViewModel。ViewModel通過構(gòu)造函數(shù)注入獲取View注入,并將自身設(shè)置為View的數(shù)據(jù)上下文。
另一種方法是將視圖的類型注冊(cè)到區(qū)域控制器中:
RegionManager.RegisterViewWithRegion( "MainRegion", typeof( MyView ) );
使用此方法允許您稍后在運(yùn)行時(shí)創(chuàng)建視圖,例如通過控制器:
IRegion region = this._regionManager.Regions["MainRegion"]; object mainView = region.GetView( MainViewName ); if ( mainView == null ) { var view = _container.ResolveSessionRelatedView<MainView>( ); region.Add( view, MainViewName ); }
由于您已注冊(cè)View的類型,因此視圖將放置在正確的區(qū)域中

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
我有一個(gè)轉(zhuǎn)換器來解耦UI和ViewModel,這就是以下幾點(diǎn):
<TabControl.ContentTemplate> <DataTemplate> <ContentPresenter Content="{Binding Tab,Converter={StaticResource TabItemConverter}"/> </DataTemplate></TabControl.ContentTemplate>
Tab是我的TabItemViewModel中的枚舉,TabItemConverter將其轉(zhuǎn)換為真實(shí)的UI。
在TabItemConverter中,只需獲取值并返回所需的用戶控件。
添加回答
舉報(bào)