2012-06-07 7 views
1

UserControlFrameworkElement 이벤트를 뷰 모델 명령에 바인딩 할 수 있습니까? MVVM과 프리즘을 사용하므로 뷰 모델이 명확 해집니다.WPF 바인딩 FrameworkElement 이벤트를

나는 여러 가지를 시도하지 것, 그리고 그들 중 누구도 일하지 : 또한

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="FrameworkElement.Unloaded"> 
     <i:InvokeCommandAction Command="{Binding Unloaded}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

이 튜토리얼 http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html

local:FrameworkElementBehavior.UnloadedCommand="{Binding Unloaded}" 

를 사용하십니까 나는 한 내 코드 - 몇 가지 기능을 추가하지만 선택의 여지가 뒤에?

위의 시도 중 오류가 발생하지 않지만 명령이 실행되지 않습니다. 나는 문제가 언로드 이벤트에있을 수 있다고 생각

public class CustomerViewModel : PosViewModelBase 
{ 
    public ICommand Unloaded 
    { 
     get { return new UnloadedCommand(); } 
    } 

    public CustomerViewModel() 
    { 

    } 

    private class UnloadedCommand : ICommand 
    { 
     public bool CanExecute(object parameter) 
     { 
      return true; 
     } 

     public event EventHandler CanExecuteChanged; 

     public void Execute(object parameter) 
     { 
      Debug.WriteLine("Customer stuff is out of view"); 
     } 
    } 
} 
+0

VS의 출력 창에서 바인딩 오류를 확인 했습니까? –

+0

예, 없습니다. –

+0

또한 이벤트가 확실히 시작됩니다. 바인딩에서 유효하지 않은 명령 속성의 이름을 변경하면 실제로 출력 창 오류가 발생합니다. 바인딩이 발생하는 것처럼 보입니다. 명령은 실행되지 않습니다. –

답변

2

:

여기 내보기 모델입니다. MSDN 페이지 http://msdn.microsoft.com/en-us/library/ms754221.aspx#common_events 가입일

: 언로드

마지막 상승 프레젠테이션 소스 또는 시각적 부모 하나에 의해 개시되어 제거된다. Unloaded가 발생되고 처리 될 때 이벤트 원본 부모 (Parent 속성에 의해 결정됨) 또는 논리적 또는 시각적 트리의 위쪽 요소가 이미 설정되지 않았을 수 있습니다. 즉, 데이터 바인딩, 리소스 참조 및 스타일이 해제 될 수 있습니다. 정상 또는 마지막으로 알려진 런타임 값으로 설정되지 않습니다.

+0

그래서 UserControl이 화면에 보이지 않을 때 내 명령을 내리는 가장 좋은 방법은 무엇입니까? 코드 숨김 또는 VisibilityChanged 이벤트일까요? –

+0

가시성을 변경한다고해서 Control이 실제로 시각적 트리에서 분리되었다는 의미는 아니며 숨겨진 것일 수도 있습니다. 시각적 트리에서 뷰가 분리 될 때 명령을 실행한다고 가정합니다. 이 모든 시나리오에서 작동하는지 확실하지 않지만 DataContextChanged 이벤트를 사용할 수 있고 해당 코드 숨김 처리기에서 if ((FrameworkElement) sender) .Parent == null을 확인한 다음 e.OldValue를 통해 뷰 모델을 검색하고 명령을 실행하십시오. – Stipo

+0

그래, 내 ContentControl의 내용이 변경 될 때 명령을 실행하는 방법 (UiElement를 명령에 전달)을 알아내는 것만으로도 충분합니다. 나는 기본적으로 네비게이션을 위해 컨트롤의 스냅 샷을 찍기를 원하므로 사용자가 그것을 다시 선택할 수 있습니다. –