2014-08-27 2 views
2

ItemsControl 컨트롤이 있습니다. 그 항목에서 나는 많은 것들을 보여줍니다 : 이미지, 텍스트 블록 등컨트롤의 바인딩 완료시 호출되는 이벤트

itemscontrol에 구현 된 '검색'기능 - 사용자가 키보드에서 문자를 입력하면 항목 제어가 새로 고쳐집니다 . 내 검색 방법은 코드 숨김으로 처리되며 1 초 이내에 완료됩니다. 그러나 글자를 입력하고 결과가 3-4 초라는 것을 알기까지의 시간. 창 닫기 명령이 있고 검색 결과를 표시하기 전에 정확한 시점에 넣고 싶습니다. 이 명령을 검색 방법 끝 부분 (코드 숨김)에 넣으면 창을 닫고 항목을 표시하는 데 몇 초의 지연이 있습니다. 바인딩이 느린 것 같아서 바인딩이 끝나면 호출되는 이벤트를 잡아야합니다. WPF에 그런 이벤트가 있습니까?

OnPropertyChanged 이벤트는 검색 메서드가 완료되기 전에 호출되므로 도움이되지 않습니다.

또한 OnDataContextChanged 이벤트로 시도했지만 컨트롤이 초기화 될 때 한 번 호출됩니다. 사용자가 글자를 입력하고 새 바인딩이 발생할 때도 호출해야합니다.

+0

가상화를 활성화 했습니까? 필터링 된 목록을 사용하여 컨트롤을 어떻게 새로 고 칩니 까? – Pragmateek

+0

@Pragmateek OnPropertyChanged 이벤트로 새로 고칩니다. –

답변

2

WPF에서 소스 속성과 대상 종속성 속성 사이에 데이터 바인딩을 설정하면이 Binding은 실제로 BindingExpression 개체로 변환되며, 적절한 시점에 원본과 대상을 많이 업데이트합니다. 뭔가가 업데이트 될 때 당신이 여기에서 볼 수

불행하게도, BindingExpression는 이벤트를 제공하지 않습니다 http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression(v=vs.110).aspx

유일한 방법은 설정하는 것입니다 UpdateSourceTrigger 당신이 당신의 뒤에 코드에서 바인딩 식을 얻을 바인딩을 정의 할 때 Explicit에 원본과 대상을 수동으로 업데이트하십시오. 그러면 전체 제어 권한을 가지며이 시나리오에서 일반적인 기능을 캡슐화 할 수 있습니다.

당신은 BindingOperations.GetBindingExpression 정적 메소드를 사용하여 BindingExpression을 얻을 수 있습니다 기타 문의 사항이있는 경우 http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression(v=vs.110).aspx

가, 물어 주시기 바랍니다.

피씨 : 이렇게하는 다른 방법이 없을까요? ItemsControl에 바인딩하는 소스 컬렉션을 사용하는 경우 소스 컬렉션에서 검색/필터링 작업을 수행하지 않고 컬렉션 바인딩을 ItemsControl으로 업데이트 할 수 없었습니까?

+0

"원본과 대상을 수동으로 업데이트"코드 숨김에서 수동으로 업데이트하려면 어떻게해야합니까? 실제로는 단방향 바인딩입니다. –

+0

'BindingExpression' 클래스를 보시면 (답변의 링크를보세요), 두 가지 메소드 인'UpdateSource'와'UpdateTarget'을 찾을 수 있습니다. 개발 컨텍스트와 관련된 적절한 시간에 호출하면됩니다. – feO2x

+0

하지만이 일과 내가 이미 한 일과 다른 점은 알 수 없습니다. UpdateSource 속성을 호출 한 후에도 몇 초의 지연이 있고 바인딩이 완료되기 전에 정확한 순간을 잡을 수 없습니다. –

관련 문제