C# Caliburn.Micro&;基础设施XamDockManager+;选项卡组窗格
我正试图让Infragistics TabGroupPane按照标准WPF TabControl与Caliburn.Micro集成 我曾尝试在引导程序中添加一个新的约定(对标准WPF约定的修改),但没有成功 我的TabGroupPane定义为: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
<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不是很友好