2016-08-26 4 views
2

이벤트 구독 취소 시점은 궁금합니다. 구독하기 전에 구독을 취소하는 것이 일반적입니다 (또는 대부분 이벤트가 호출 된 시간부터). xaml은 xaml이 처리하며 추가 작업을 수행 할 필요가 없음). 하지만 지금은 컨스트럭터에 등록하고 싶을 때 상황이 나빠요, 어디에서 탈퇴합니까? 언로드 이벤트 인 에서 작업을 시도했지만 내 컨트롤이 언로드 된 후 다시 생성하지 않고 다시로드되었습니다.맞춤 컨트롤에 대한 이벤트 수신 거부 위치

편집 내가 폐기 내가 무시할 수 있습니다 방법 또는 이런 일이있을 것을 기대했다, 분명히 내가 객체가 더 이상 필요하지 않을 때 탈퇴 할 수 있도록합니다. 아이디어가 있으십니까?

샘플 코드

public class MYListBox : ListBox 
{ 
    public MYListBox() 
    { 
     SelectionChanged += MYListBox_SelectionChanged; 
     Unloaded += MYListBox_Unloaded; 
    } 

    private void MYListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
    } 

    private void MYListBox_Unloaded(object sender, RoutedEventArgs e) 
    { 
     SelectionChanged -= MYListBox_SelectionChanged; 
     Unloaded -= MYListBox_Unloaded; 
    } 
} 

그래서 때로는 XAML

<UserControl x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:wpfApplication1="clr-namespace:WpfApplication1"> 
<wpfApplication1:MYListBox /> 
</UserControl > 

, 나는 사용자가 다른 곳으로 이동 한 다음 동일한 인스턴스에 컴백을 할 수있게됩니다. 사용자가 다시 돌아올 때 탐색하는 또 다른 시간은 새로운 인스턴스가됩니다. 그래서 두 번째 상황에서 저는 그 사건에서 탈퇴 할 필요가 있다고 생각했습니다.

감사합니다 :)

+0

로드 된 이벤트로 구독 할 수 있습니다. –

+0

@WingerSendon 안녕하세요, 질문을 수정하여 명확하게 처리했습니다. SelectionChanged 내 코드가 실행되지 않기 때문에 Loaded 이벤트에서 수신 거부 할 수 없습니다. 나는이 MyListBox가 더 이상 필요하지 않을 때만 구독을 취소하려고합니다. – adminSoftDK

답변

1

그것은 당신이 단지 인 selectionchanged 이벤트를 무시하지 및 이벤트 구독을 처리 할 수없는 이유가, 당신은 기본 클래스로리스트 박스를 사용했습니다처럼 보인다?

protected override void OnSelectionChanged(SelectionChangedEventArgs e) 
{ 
    // Do custom work. 

    // Call base class implementation. 
    base.OnSelectionChanged(e); 
} 
관련 문제