2010-11-29 117 views
1

我試圖讓Infragistics TabGroupPane與Caliburn.Micro按照標準的WPF TabControl集成。Caliburn.Micro&Infragistics XamDockManager + TabGroupPane

我試過在bootstrapper中添加一個新的約定(對標準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> 

它似乎並沒有被卡利在所有發現的。

以前有沒有其他人做過這個?

乾杯!

更新
我已經創建了自己的碼頭管理器類,a blog post解釋它或只是code on bitbucket。希望這對別人有用!

+0

似乎有一種方法可以使用此處的代碼生成ContentPanes:http://blogs.infragistics .com/blogs/andrew_smith/archive/2010/01/12/itemssource-for-xamdockmanager-elements.aspx,但我還沒有和Caliburn一起工作。 – ChrisWay 2010-12-01 17:36:58

回答

1

如果你不能得到ContentPaneFactory在Infragistics的博客建議通過有約束力,填補了TabGroupPane,你可能會考慮這些替代方法:

  • 與BindableCollection保持你的VM到位,代碼訂閱VM變更通知 - 根據觀察集合中發生的實際更改以編程方式隱藏和更改TabGroupPane
  • 根據所需的TabGroupPane變體構建自定義IResult並從VM(使用Coroutine.Execute)調用它。
    IResult。執行正文你可以訪問ActionExecutionContext.View,這樣你就可以通過名稱到達TabGroupPane並操​​作你需要的任何操作。
    通過這種方式,您可以讓您的VM免於直接引用特定的UI控件庫。
  • 定義了一個抽象整個Docking Manager的接口,並將其用作來自VM的服務(請參閱this post about the implementation of a Docking Manager)。這種方法與MVVM的想法有很大分歧,但不幸的是,大多數對接庫不是非常適合MVVM ...
+0

謝謝Marco。我還沒有機會嘗試這些,但我會將其標記爲答案,因爲我確信它會工作! – ChrisWay 2011-01-10 16:40:04

0

您是否嘗試過使用更明確的綁定? Caliburn只能對某些元素類型進行自動綁定,我猜Infragistics TabGroupPane不是其中之一!

我想你必須使用這樣的事情:

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

注:這只是用來作爲一個例子,不知道,如果是的ItemSource正確的財產!

+0

感謝您的回答。這就解決了在XamDockManager中沒有找到它的問題,但我仍然需要找到一種方法將內容包裝到ContentPane中,因爲這是您可以添加到TabGroupPane的唯一項目。 – ChrisWay 2010-11-30 18:10:45

1

您可以將定製控件添加到Caliburn Micro的ConventionManager類中,我將簡單地遵循標準TabGroupPanel的示例。

我會對修改實際的課程保持警惕,如果我沒有記錯(在CaliburnMicro Codeplex頁面的論壇上有最近發佈的帖子)您還可以通過重寫Config方法將自定義約定添加到引導程序中?我這樣說是因爲如果你修改課程本身,你會把自己綁定到特定版本的Caliburn。

它是一個非常簡單的框架,並且易於深入瞭解,我建議您將視圖綁定到視圖模型時逐步執行代碼,您將瞭解如何設置這些約定。

+0

感謝您的回答。我看了一下自定義約定,但我不太清楚如何讓它工作,因爲我需要將視圖可能包含在ContentPane內部以供TabGroupPane顯示。 – ChrisWay 2010-12-01 17:36:34