source

WPF 사용자 제어의 로드된 이벤트가 두 번 이상 발생함

itover 2023. 4. 27. 22:13
반응형

WPF 사용자 제어의 로드된 이벤트가 두 번 이상 발생함

WPF에서 탭 기반 환경을 구현하려면 양식을 사용자 컨트롤로 변환해야 하지만, 이 작업을 수행할 때는Loaded사용자 컨트롤의 이벤트를 호출합니다.

인터넷에서 검색하는 동안 다른 사람들도 이 문제를 지적했습니다.로드된 이벤트가 한 번만 호출되도록 하려면 어떻게 해야 합니까?여러 번 호출되면 제어 장치의 초기화가 여러 번 발생하기 때문입니다.

블로그에서 설명한 것처럼 로드된 이벤트는 컨트롤이 렌더링될 때마다(즉, 시각적 트리에 추가될 때) 실행됩니다.

컨트롤을 여러 번 로드/언로드할 수 있는 여러 컨트롤이 있습니다.예를 들어 기본 WPF 탭 컨트롤은 선택한 탭의 내용만 렌더링합니다.따라서 새 탭을 선택하면 이전에 선택한 탭의 내용이 언로드됩니다.이전에 선택한 탭을 다시 클릭하면 내용이 다시 로드됩니다.

한 가지 해결 방법은 부울을 사용하여 다른 사용자가 제안한 대로 컨트롤을 이미 초기화했는지 여부를 표시하는 것입니다.대신 초기화 이벤트를 사용할 수도 있습니다.

라우팅된 이벤트 처리기는 자신을 제거할 수 있으며 제거해야 합니다.Loaded훅을 제일 먼저 하는 것처럼.

public class MyClass : Window
{
    public MyClass()
    {
        Loaded += MyLoadedRoutedEventHandler;
    }

    void MyLoadedRoutedEventHandler(Object sender, RoutedEventArgs e)
    {
        Loaded -= MyLoadedRoutedEventHandler;
        /// ...
    }
};

set aloaded이벤트에서 플래그를 지정하고 플래그가 이미 설정된 경우에는 아무것도 수행하지 마십시오.

위에서 언급한 것처럼, 당신은 그것에 bool flag를 사용할 수 있습니다.

bool isPageLoadingForFirstTime = true;

public void LoadedEvent()
{
  if(ispageLoadingForFirstTime)
   {
      //do something
      ispageLoadingForFirstTime = false;
   }
}

언급URL : https://stackoverflow.com/questions/3421303/loaded-event-of-a-wpf-user-control-fires-more-than-once

반응형