2014-02-28 1 views
2

listpicker가 "닫히거나"정상 상태로 돌아갈 때 메서드를 실행해야하는 listpicker 요소가 있습니다. 내 xaml은 다음과 같습니다.WP8 XAML DataTrigger CallMethodAction 뒤에 코드에서 메서드를 호출하는 데 사용

<i:Interaction.Triggers> 
    <exp:DataTrigger Binding="{Binding ListPickerMode, ElementName=ListPickerAssembly}" Value="Normal"> 

이제 코드 뒤에서 메소드를 호출해야합니다. 내가 검색 할 수있는 모든 것의 처음 3 페이지에 자주색 링크가 있습니다. 그것이 작동 할 수 있지만 그것을 사용하는 방법을 알아낼 수 없습니다처럼 보이는

<exp:CallMethodAction 

태그 :

은 내가이 있음을 참조하십시오.

도움을 주시면 감사하겠습니다.

업데이트

제대로 작동합니다. 내 .cs에서 내 생성자에 추가 : 내 XAML에서

DataContext = this; 

나는 추가 :

x:Name="Page" 

그런 다음 내 데이터 트리거에 내가 추가 :

<exp:CallMethodAction TargetObject="{Binding DataContext, ElementName=Page}" MethodName="Fire" /> 

그것은 지금 메소드를 호출 .

답변

1

CallMethodAction은 TargetObjectMethodName 속성을 사용하여 호출 할 메서드를 결정합니다. 코드 숨김 메소드를 대상으로하려면 "TargetObject"가 컨트롤/페이지/루트의 루트 여야합니다. 그것은 템플릿 컨트롤의 경우는 페이지/컨트롤의 경우,

<phone:Page 
    x:Name="page" ... 

    <exp:CallMethodAction TargetObject="{Binding ElementName=page}" 
          MethodName="MethodToInvoke" /> 
(...이 실제로 작동 100 % 모르겠지만, 시도) 어쩌면 바인딩 ElementName를 사용

<exp:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
         MethodName="MethodToInvoke" /> 

를 사용

그런 다음 메서드가 public인지 확인하십시오 (이벤트 처리기를 사용하는 것과는 다릅니다).

public void MethodToInvoke() { ... } 
+0

답장을 보내 주셔서 감사합니다. 나는 아직도 행운이 없다. 나는 뒤에있는 코드를 호출하기 때문에 내가 보여준 첫 번째 코드를 사용했다. 나는 또한 다음과 같이 시도했다 :'{CallMethodAction TargetObject = "{Binding RelativeSource = {RelativeSource Mode = TemplatedParent}}"MethodName = "Fire"/>'My.cs 메쏘드는 단지 :'public void Fire() {MessageBox.Show "불"); }'나는 어떤 종류의 참조가 빠져 있는지 잘 모르겠습니다. – Prizz

+0

@Prizz ah ... 문제는 페이지가 "TemplatedParent"(제어 템플릿 내에서만 적용됨)가 아니라는 것입니다. Silverlight에서는 "RelativeSource AncestorType = phone : Page"을 사용하면이 작업이 쉬울 것입니다.하지만 불행히도 바인딩은 WP에 없습니다. – McGarnagle

+0

@Prizz 위의 두 번째 예제 인 "ElementName"바인딩을 사용하려고합니다.하지만 내가 언급했듯이 제대로 작동하는지 확신 할 수는 없지만 그렇게한다면 가장 쉬운 방법입니다. 그렇지 않은 경우 뷰 모델을 사용하는 것이 가장 쉽습니다. – McGarnagle

관련 문제