2013-10-30 10 views
0

Panel에서 상속 한 컨트롤이 있습니다. 이 컨트롤은 사용자 지정 컨트롤에 바인딩 된 컬렉션을 기반으로 단추 컨트롤을 만듭니다. 어떻게하면 children.click 이벤트를 처리 할 수 ​​있습니까? 여기 내 XAML이 있습니다. 명령이 실행되지 않습니다.EventToCommand를 사용하여 WPF 패널의 하위 컨트롤에서 라우팅 된 이벤트를 처리하는 방법은 무엇입니까?

<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <control:TreeContainer HorizontalAlignment="Center" 
          Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20" 
          RootNode="{Binding Path=RootNode}" 
          ChildrenNodes="{Binding Path=ChildrenNodes}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Button.Click"> 
       <cmd:EventToCommand Command="{Binding Path=TreeContainerClickCommand, Mode=OneWay}" PassEventArgsToCommand="True" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
     </control:TreeContainer> 
    </ScrollViewer> 

답변

0

컨트롤의 모든 버튼에 스타일을 설정하고 거기에 명령을 바인딩 할 수 있습니다. TargetType="Button"의 스타일을 TreeContainer에 추가하면 TreeContainer의 모든 Button에 적용됩니다. 당신의 버튼에서 TreeContainer 뷰 모델에 액세스 할 수없는 경우

<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
<control:TreeContainer HorizontalAlignment="Center" 
         Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20" 
         RootNode="{Binding Path=RootNode}" 
         ChildrenNodes="{Binding Path=ChildrenNodes}"> 
    <control:TreeContainer.Resources> 
    <Style TargetType="Button"> 
     <Setter Property="Command" Value="{Binding Path=TreeContainerClickCommand, Mode=OneWay}"/> 
    </Style> 
    </control:TreeContainer.Resources> 
</control:TreeContainer> 

, 당신은 RelativeSource를 통해 액세스해야합니다 : 당신이해야합니다

<Setter Property="Command" 
     Value="{Binding Mode=OneWay, 
         Path=DataContext.TreeContainerClickCommand, 
         RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type control:TreeContainer}}}" /> 

노트가를 변경하려면 소스가 TreeContainer이고 ViewModel이 아니기 때문에 DataContext.* 경로

편집 : 을 얻으려면 EventTrigger이 필요하면 위의 템플릿 템플릿을 사용하면됩니다. 그런 다음 상호 작용 - 트리거를 사용할 수있는 새 템플릿을 정의 할 수 있습니다.

+0

내 명령이 실행되지만 EventToCommand를 사용하여 원하는 이벤트 대상을 얻지 못합니다. – user2936766

+0

eventargs에서 무엇이 필요합니까? 대신'CommandParameter'를 사용할 수 있습니까? – Herm