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

을하지만 그것을 적용하려고 할 때 오류가 발생합니다 :

<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> 

: 여기

No target found for method CloseItem.

내 코드입니다 도와 주실 수 있겠습니까?

감사합니다.

답변

2

정확한 문제의 원인이 무엇인지 완전히 확신하지 못합니다. (저는 아주 오래된 튜토리얼과 크게 다른 어셈블리가 결합 된 것으로 의심됩니다)하지만 어떻게 작동시킬 수 있는지 알고 있습니다. 이런 오래된 공용 메소드를 만들고 호출하십시오. 그것은 당신이 거기에있는 것을 무효화하여 CloseItem으로 이름을 붙일 수 있습니다. 그런 다음이 확장 메서드를 호출하고 IConductor 인스턴스와 IScreen 인스턴스를 전달합니다.

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

정말 고마워요! 그것은 아주 잘 작동합니다. –

+0

다른 질문에 대답하는 방법을 알고 있는지 궁금합니다. http://stackoverflow.com/questions/11852418/componentones-flexgrid-background-color 및 http://stackoverflow.com/questions/11835186/c1flexgrid-width 감사! –

+0

C1 시험판을 다운로드하여 한 번 훑어 보았습니다. 나는 해결책으로 의견을 게시 한 다음 대답으로 옮겼습니다. 희망이 도움이됩니다. – erodewald

6

이 될 일을하는 또 다른 방법 :

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

당신이 여분의 방법을 만들 필요가 없습니다 그런 식으로.

+0

예. 문제는 현재 Caliburn.Micro에 IConductor 인터페이스의 일부로 정의 된 CloseItem이 없기 때문에 DeactivateItem을 사용하고 true를 닫은 상태로 전달하면 튜토리얼의 경우에 좋은 대안이 될 수 있습니다. – Eternal21

+0

git의 공식 샘플은 동일한 솔루션을 사용하는 것 같습니다 : https://github.com/paulcbetts/CaliburnMicro/blob/master/samples/Caliburn.Micro.SimpleMDI/Caliburn.Micro.SimpleMDI/ShellView.xaml – Eternal21

관련 문제