亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將TabControl綁定到ViewModels集合?

如何將TabControl綁定到ViewModels集合?

如何將TabControl綁定到ViewModels集合?基本上我在我的MainViewModel.cs中:ObservableCollection<TabItem> MyTabs { get; private set; }但是,我需要以某種方式不僅能夠創建選項卡,而且還可以在維護MVVM的同時加載選項卡內容并將其鏈接到適當的視圖模型。基本上,我如何將用戶控件作為tabitem的內容加載并將該usercontrol連接到適當的viewmodel。使這個困難的部分是ViewModel不應該構造實際的視圖項,對吧?或者可以嗎?基本上,這是MVVM合適的:UserControl address = new AddressControl(); NotificationObject vm = new AddressViewModel(); address.DataContext = vm; MyTabs[0] = new TabItem() {     Content = address; }我只是問,因為我正在ViewModel中構建一個View(AddressControl),這對我來說聽起來像MVVM禁忌。
查看完整描述

3 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

在Prism中,您通常會將選項卡控件設置為一個區域,這樣您就不必控制綁定的選項卡頁面集合。

<TabControl 
    x:Name="MainRegionHost"
    Regions:RegionManager.RegionName="MainRegion" 
    />

現在可以通過將自身注冊到MainRegion區域來添加視圖:

RegionManager.RegisterViewWithRegion( "MainRegion", 
    ( ) => Container.Resolve<IMyViewModel>( ).View );

在這里你可以看到Prism的特色。視圖由ViewModel實例化。在我的情況下,我通過Inversion of Control容器(例如Unity或MEF)解析ViewModel。ViewModel通過構造函數注入獲取View注入,并將自身設置為View的數據上下文。

另一種方法是將視圖的類型注冊到區域控制器中:

RegionManager.RegisterViewWithRegion( "MainRegion", typeof( MyView ) );

使用此方法允許您稍后在運行時創建視圖,例如通過控制器:

IRegion region = this._regionManager.Regions["MainRegion"];

object mainView = region.GetView( MainViewName );
if ( mainView == null )
{
    var view = _container.ResolveSessionRelatedView<MainView>( );
    region.Add( view, MainViewName );
}

由于您已注冊View的類型,因此視圖將放置在正確的區域中

查看完整回答
反對 回復 2019-08-02
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

我有一個轉換器來解耦UI和ViewModel,這就是以下幾點:

<TabControl.ContentTemplate>
    <DataTemplate>
        <ContentPresenter Content="{Binding Tab,Converter={StaticResource TabItemConverter}"/>
    </DataTemplate></TabControl.ContentTemplate>

Tab是我的TabItemViewModel中的枚舉,TabItemConverter將其轉換為真實的UI。

在TabItemConverter中,只需獲取值并返回所需的用戶控件。


查看完整回答
反對 回復 2019-08-02
  • 3 回答
  • 0 關注
  • 957 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號