2012-08-08 71 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