我的菜单项很少,单击每个菜单项,需要将相应的ViewModel加载为新选项卡。为此,我采取了以下方法:
<dx:DXTabControl OverridesDefaultStyle="True" Margin="2" BorderThickness="0" Padding="0" dxlc:DockLayoutControl.Dock="Client"
Grid.Row="1" ItemsSource="{Binding Workspaces}">
<dx:DXTabControl.View>
<dx:TabControlScrollView ShowHeaderMenu="True" ShowHiddenTabItemsInHeaderMenu="False" HeaderLocation="Top" HeaderOrientation="Horizontal" AllowAnimation="True" AllowHideTabItems="True" AutoHideScrollButtons="True"
ScrollViewer.PanningMode="HorizontalOnly" ScrollButtonsShowMode="WhenNeeded"/>
</dx:DXTabControl.View>
<dx:DXTabControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Content}"/>
</DataTemplate>
</dx:DXTabControl.ItemTemplate>
</dx:DXTabControl>
并在ViewModel(C#)中:
public ObservableCollection<DXTabItem> Workspaces
{
get { return workspaces; }
set { this.Set<ObservableCollection<DXTabItem>>("Workspaces", ref this.workspaces, value); }
}
并加载ViewModel:
Workspaces = new ObservableCollection<DXTabItem>() { new DXTabItem() { Header = header,
Content = contentDetails, IsSelected= true, AllowHide = (((WorkspaceViewModel)contentDetails).AllowTabHiding) ? DefaultBoolean.True: DefaultBoolean.False } };
这种方法效果很好,并且给了我想要的行为。但是我确实想摆脱我的ViewModel的DXTabItem,因为这使ViewModel意识到了View。请让我知道解决此问题的最佳方法。
谢谢!
席德
最佳答案
在MVVM-manner中绑定(bind)DXTabControl
时,不应在ViewModel的代码中使用DXTabItems
。只需将您的数据收集绑定(bind)到Binding to Data帮助文章中指定的DXTabControl.ItemsSource
属性即可。
要指定选项卡项目和标题的视觉表示,请分别使用DXTabControl.ItemTemplate
和DXTabControl.ItemHeaderTemplate
模板。
请查看How to bind DXTabControl to data示例以获取详细信息。