1

我正在尝试让 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>

Caliburn 似乎根本没有发现它。

以前有没有其他人这样做过?

干杯!

更新
我已经创建了自己的码头管理器类,一篇解释它的博客文章或只是bitbucket 上的代码。希望这对某人有用!

4

3 回答 3

1

您可以将定制控件添加到 Caliburn Micro 中的 ConventionManager 类,我将简单地按照标准 TabGroupPanel 的示例。

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

它是一个非常简单的框架,并且很容易深入了解,我建议您逐步执行将视图绑定到视图模型时运行的代码,在那里您将了解这些约定是如何设置的。

于 2010-12-01T16:54:03.237 回答
1

如果您无法获得 Infragistics 博客中建议的 ContentPaneFactory 通过绑定填充 TabGroupPane,您可以考虑以下替代方法:

  • 使用 BindableCollection 保留您的 VM,在代码隐藏中订阅 VM 更改通知,并根据观察到的集合中发生的实际更改以编程方式更改 TabGroupPane
  • 构建自定义 IResult 并根据所需的 TabGroupPane 变体从 VM(使用 Coroutine.Execute)调用它。
    在 IResult.Execute 主体中,您可以访问 ActionExecutionContext.View,因此您可以按名称访问 TabGroupPane 并对其进行所需的任何操作。
    通过这种方式,您可以使您的 VM 免于直接引用特定的 UI 控件库。
  • 定义一个抽象整个 Docking Manager 的接口,并将其用作 VM 的服务(请参阅这篇关于 Docking Manager 实现的帖子)。这种方法与 MVVM 的想法有很大的不同,但不幸的是,大多数对接库对 MVVM 不是很友好......
于 2010-12-21T00:33:50.610 回答
0

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

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

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

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

于 2010-11-30T06:17:47.463 回答