2012-02-06 6 views
1

Silverlight 4 응용 프로그램에 데이터 격자가 있습니다. 숫자 값만 사용하고 몇 가지 다른 특정 작업을 수행하는 사용자 지정 텍스트 상자도 만들었습니다. 또한 바인딩하는 사용자 지정 컨트롤에 10 진수 종속성 속성을 추가하여 TextBox에서 컨트롤이 상속하는 텍스트의 서식있는 버전을 거의 반환합니다.사용자 지정 컨트롤을 사용하는 Silverlight DataGrid 가상화

그런 다음 DataGrid의 itemssource를 observablecolletion에 바인딩합니다. DataGridTemplateColumn을 사용하여 DataGrid의 열 중 하나로 사용자 정의 컨트롤을 추가했습니다.

DataGrid의 가상화를 제외한 모든 기능이 정상적으로 작동합니다. DataGrid에 항목을 추가하는 경우 내 사용자 정의 컨트롤에서 값을 편집하고 행을 삭제 한 다음 완전히 새로운 인스턴스를 추가하면 내 사용자 정의 컨트롤의 값은 삭제 된 행의 값입니다. 정리를 위해 그것은 구속력있는 실수 나 그와 같은 것이 아닙니다. 문제는 내 사용자 지정 텍스트 상자의 생성자가 호출되지 않고 또한 사용자 지정 컨트롤의 실제 값을 변경할 때까지 바인딩이 업데이트되지 않는다는 것입니다. DataGrid의 가상화는 이전에 생성 된 컨트롤을 다시 사용합니다.

가상화를 해제하고 싶지 않습니다. 내 사용자 정의 컨트롤을 재활용 (가상화) 방식으로 지정하는 방법이 있습니까? 컨트롤이 가상화되거나 재활용 될 때 발동되는 이벤트입니까?

도움이 될 것입니다.

답변

0

Silverlight 5로 업그레이드 할 수 있습니까? SL 5에서는 DataContextChanged 이벤트를 사용합니다.이 이벤트는 컨트롤이 다른 행을 그리는 데 재사용 될 때 감지하는 좋은 방법이라고 생각합니다.

SL 5가 옵션이 아니면 Loaded 이벤트에서 catch 할 수 있습니다. 완전히 확신 할 수는 없지만 컨트롤을 다시 사용할 때 Loaded가 실행되어야한다고 생각합니다. 그런 다음 Loaded가 실행될 때마다 현재 DataContext를 임시 변수에 저장하십시오. 다음 번에 Loaded가 실행되면 이전 DataContext를 현재 DataContext와 비교할 수 있으며, 변경된 경우 필요에 따라 논리를 다시 실행하십시오.

관련 문제