C# Caliburn.Micro&;基础设施XamDockManager+;选项卡组窗格

C# Caliburn.Micro&;基础设施XamDockManager+;选项卡组窗格,c#,wpf,infragistics,caliburn.micro,C#,Wpf,Infragistics,Caliburn.micro,我正试图让Infragistics TabGroupPane按照标准WPF TabControl与Caliburn.Micro集成 我曾尝试在引导程序中添加一个新的约定(对标准WPF约定的修改),但没有成功 我的TabGroupPane定义为: <igDock:TabGroupPane x:Name="Items"/> 将项添加到集合时,会引发异常“InvalidOperationException:TabGroupPane只能包含'ContentPane'和'ContentP

我正试图让Infragistics TabGroupPane按照标准WPF TabControl与Caliburn.Micro集成

我曾尝试在引导程序中添加一个新的约定(对标准WPF约定的修改),但没有成功

我的TabGroupPane定义为:

<igDock:TabGroupPane x:Name="Items"/>

将项添加到集合时,会引发异常“InvalidOperationException:TabGroupPane只能包含'ContentPane'和'ContentPanePlaceholder'实例”

此外,如果我的TabGroupPane位于DockManager中:

<igDock:XamDockManager>
    <igDock:DocumentContentHost>
        <igDock:SplitPane>
            <igDock:TabGroupPane x:Name="Items" />
        </igDock:SplitPane>
    </igDock:DocumentContentHost>
</igDock:XamDockManager>

卡利本似乎根本没有找到它

以前有其他人这样做过吗

干杯

更新

我已经创建了自己的dock manager类,对其进行了解释,或者仅对其进行了说明。希望这将是有用的人

您是否尝试过使用更显式的绑定?Caliburn只能对某些元素类型进行自动绑定,我猜Infrastics TabGroupPane不是其中之一

我想你必须使用这样的东西:

<igDock:TabGroupPane x:Name="Items" ItemSource={Binding <what to bind to>}/>


注意:这只是一个示例,不确定ItemSource是否是正确的属性

您可以将定制控件添加到Caliburn Micro中的ConventionManager类中,我只需遵循标准TabGroupPanel的示例即可

不过,如果我没记错的话(CaliburnMicro Codeplex页面的论坛上最近有一篇帖子),我会小心修改实际的类。您还可以通过覆盖Config方法向引导程序添加定制约定吗?我这样说是因为如果你修改了类本身,你会把自己绑定到Caliburn的一个特定版本上


这是一个非常简单的框架,很容易深入了解,我建议您在将视图绑定到viewmodel时,仔细阅读所运行的代码,在那里您将了解这些约定是如何设置的。

如果您无法使用Infrastics博客中建议的ContentPaneFactory通过绑定填充TabGroupPane,你可以考虑这些替代方法:

  • 使用BindableCollection保留您的VM,在代码隐藏中订阅VM更改通知,并根据观察到的集合中发生的实际更改以编程方式更改TabGroupPane
  • 根据所需的TabGroupPane变体,构建自定义IResult并从VM调用它(使用Coroutine.Execute)。
    在IResult.Execute body中,您可以访问ActionExecutionContext.View,这样您就可以按名称访问选项卡组窗格,并对其执行所需的任何操作。
    通过这种方式,您可以使VM不直接引用特定的UI控件库
  • 定义一个抽象整个Docking Manager的接口,并将其用作来自VM的服务(请参阅)。这种方法与MVVM的想法有很大的不同,但不幸的是,大多数对接库对MVVM不是很友好

谢谢你的回答。这就解决了在XamDockManager中找不到它的问题,但我仍然需要找到一种方法将内容包装到ContentPane中,因为这是唯一可以添加到TabGroupPane的项。谢谢您的回答。我已经查看了自定义约定,但我不太确定如何使其工作,因为我需要将视图包装在ContentPane中,以便TabGroupPane显示。似乎有一种方法可以使用此处的代码生成ContentPane:但我还没有将其与Caliburn一起工作。谢谢Marco。我还没有机会尝试这些,但我会将其标记为答案,因为我相信其中一个会起作用!我最终创建了自己的dock manager,我用代码链接更新了原始问题。谢谢你的帮助!