2010-11-25 2 views
2

WPF에서는 XAML에서 이벤트 핸들러를 정의 할 수 있습니다 (예 : ComboBox의 SelectionChanged). 그러나, 내가 떠나는 문제는 너무 일찍 해고된다는 것입니다. 컨트롤이 방금 생성되면 유선 연결됩니다. 결과적으로 해당 코드 아래의 다른 컨트롤이 이벤트 처리기에서 참조되는 경우 null 예외가 발생합니다. 이벤트 처리기에서 많은 null 검사가 끝나면 다른 경우에는 불필요합니다. 모든 컨트롤을 만든 후에 모든 이벤트를 연결하고 싶습니다 (예 : OnInitialized). 그것을 할 수있는 방법이 있습니까? 또는 나는 무엇인가 여기에서 놓쳤 느냐?WPF : XAML에 정의 된 이벤트 발생을 지연시키는 방법?

+1

코드를 게시 할 수 있습니까? SelectedItem에 아무것도 바인딩합니까? – Vitalik

답변

2

가장 좋은 솔루션은 생성자에서 InitializeComponent() 호출 후 코드 숨김에서 이러한 이벤트 처리기를 직접 정의하는 것이라고 생각합니다. 물론 이것은 더 이상 XAML이 아니지만 핸들러가 참조 할 수있는 모든 컨트롤이 이미 만들어 졌는지 확인하는 유일한 방법입니다.

+0

팁 주셔서 감사. 나는 대부분의 이벤트 핸들러를이 방법으로 정의했다. 그러나 어쨌든 (WinForm 디자이너에서와 마찬가지로) XAML에서 선언 된 핸들러를 조금 더 깨끗하게 처리한다고 느낍니다. 일관성있게 만들고 싶기 때문에 전체 프로젝트에 대해 한 가지 방법이나 다른 방법을 선택해야합니다. – newman

0

이벤트 핸들러의 시작 부분에서 주 제어의 IsLoaded 속성을 확인하고 false이면 반환 할 수 있습니다. 따라서 사실이면 모든 것이 만들어지고 상호 작용할 준비가되었음을 확신 할 수 있습니다.

+0

IsLoaded 속성에 대한 정보 주셔서 감사합니다. – newman

+0

이 접근법의 문제점은 시작할 때 올바르게 설정하기 위해 이벤트에 의존 할 수 없으며 이벤트 핸들을 명시 적으로 호출해야한다는 것입니다. – newman

관련 문제