2012-08-08 70 views
3

在我的WPF應用Caliburn.Micro,我有一個TabControl。我希望能夠根據需要關閉標籤頁。我找到了一種方法來寫:Caliburn.Micro:不能關閉標籤

http://devlicio.us/blogs/rob_eisenberg/archive/2010/10/19/caliburn-micro-soup-to-nuts-part-6c-simple-mdi-with-screen-collections.aspx

但是當我嘗試應用它,我得到一個錯誤:

No target found for method CloseItem.

這裏是我的代碼:

<TabControl x:Name="Items" > 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding DisplayName}" /> 
       <Button Content="X" 
          cal:Message.Attach="CloseItem($dataContext)" /> 
      </StackPanel> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

能否請你幫忙?

謝謝。

回答

2

不完全一定是什麼導致你確切的問題(我懷疑一個很老的教程加上千差萬別的裝配是問題),但我知道你可以得到它的工作。創建任何這樣的舊公共方法並調用它。它會覆蓋你在裏面的內容,所以你可以把它命名爲CloseItem。然後調用這個擴展方法並傳入IConductor實例和IScreen實例。

public void CloseItem(object dataContext) 
{ 
    ScreenExtensions.CloseItem(this, dataContext); 
} 
+0

太謝謝你了!它工作得很好。 – 2012-08-08 17:04:35

+0

不知你是否知道如何回答,我有一些其他問題:http://stackoverflow.com/questions/11852418/componentones-flexgrid-background-color和http://stackoverflow.com/questions/11835186/c1flexgrid-width謝謝! – 2012-08-08 17:11:03

+0

下載了C1試用版並看了一下 - 我爲您發佈了一個解決方案作爲評論,然後將其移至答案。希望能幫助到你。 – erodewald 2012-08-08 18:01:08

6

做這將是另一種方式:

<Button Content="X" cal:Message.Attach="DeactivateItem($dataContext, 'true')" /> 

這樣你不必創建一個額外的方法。

+0

是的。這個問題似乎是當前Caliburn.Micro沒有CloseItem定義爲IConductor接口的一部分,因此,使用DeactivateItem和真實的傳遞給關閉是本教程情況下,一個好的解決方法。 – Eternal21 2016-04-18 16:47:14

+0

在git的官方樣片似乎使用相同的解決方案:https://github.com/paulcbetts/CaliburnMicro/blob/master/samples/Caliburn.Micro.SimpleMDI/Caliburn.Micro.SimpleMDI/ShellView.xaml – Eternal21 2016-04-19 11:57:05