我正在使用MVVM模式,在VS2013中使用C#。
我的项目中有一个DocumentGroup,项目目录中有一组用户控件(xaml文件)。
<dxd:DocumentGroup Name="documentcontainer" ItemHeight="3*" SelectedTabIndex="0" ItemsSource="{Binding tabsCollection}" AllowMove="False" AllowFloat="False" AllowDrag="False">
</dxd:DocumentGroup>
我的viewModel是tabsCollection的定义:
private ObservableCollection<DocumentPanel> p_tabsCollection;
public ObservableCollection<DocumentPanel> tabsCollection
{
get { return p_tabsCollection; }
set
{
p_tabsCollection = value;
base.RaisePropertyChangedEvent("tabsCollection");
}
}
private void Initialize() {
DocumentPanel t = new DocumentPanel( );
t.Content = Application.LoadComponent(new Uri("View/UC/ucImpianti.xaml", UriKind.Relative)); ;
p_tabsCollection.Add(t);
}
我想创建一些用用户控件填充的选项卡。从我的菜单中,不同的声音必须在选项卡&#34;中打开不同的&#34; usercontrol,因此在开始时没有选项卡:它们是在运行时创建的,当用户点击菜单时。
更新的代码:现在看来是正确的,但是在启动时会产生错误/异常..
UPDATE - &GT;解
这样就可以了:
<dxd:DocumentGroup Name="documentcontainer" ItemHeight="3*" ItemsSource="{Binding tabsCollection}" AllowDrag="False" AllowMove="False" AllowSplitters="False" AllowSizing="False" AllowFloat="False" ClosingBehavior="ImmediatelyRemove" SelectedTabIndex="{Binding SelectedDocumentIndex}" >
<dxd:DocumentGroup.ItemStyle>
<Style TargetType="dxd:DocumentPanel">
<Setter Property="CloseCommand" Value="{Binding CloseCommand}" />
</Style>
</dxd:DocumentGroup.ItemStyle>
</dxd:DocumentGroup>
当我问这个问题时,我发布的CloseCommand是一样的。解决方案的关键在于xaml。
答案 0 :(得分:1)
您可以将数据集绑定到DockLayoutManager.ItemsSource属性,如MVVM Support - Building Dock UI帮助文章中所示。要将ItemsSource集合的元素可视化为布局项,请通过ItemTemplate或ItemTemplateSelector属性提供模板。
答案 1 :(得分:0)
请阅读以下文章,该文章描述了如何使用DevExpress MVVM Framework和TabbedDocumentUIService实现,该实现提供了创建和显示文档作为选项卡的方法:DevExpress MVVM Framework. Interaction of ViewModels. IDocumentManagerService.
以下是主要想法:
<Button Content="Show Document"
Command="{Binding ShowDocumentCommand}" CommandParameter="Document1" />
...
<dxdo:DockLayoutManager>
<dxdo:LayoutGroup Orientation="Vertical">
<dxdo:DocumentGroup Caption="Documents">
<dxmvvm:Interaction.Behaviors>
<dxdo:TabbedDocumentUIService />
</dxmvvm:Interaction.Behaviors>
</dxdo:DocumentGroup>
</dxdo:LayoutGroup>
</dxdo:DockLayoutManager>
[POCOViewModel]
public class MainViewModel : ViewModelBase {
[ServiceProperty]
protected virtual IDocumentManagerService DocumentManager {
get { return null; }
}
[Command]
public void ShowDocument(string document) {
IDocument doc = DocumentManager.CreateDocument(document, null, this);
doc.Title = document;
doc.Show();
}
}
完整的代码示例在http://www.devexpress.com/example=E4861的DevExpress代码示例数据库中提供。
有关构建功能齐全且组织良好的MVVM应用程序的相关分步教程系列,只需点击几下:Scaffolding Wizards - Getting Started