동적으로 빌드하는 WP7 앱의 페이지가 있습니다. 그리드에 60 개의 사용자 컨트롤을 만들고 추가하는데 약 5 초가 걸립니다. 이 속도를 높이는 방법을 찾아야합니다. 다음과 같이wp7에서 동적으로 사용자 컨트롤을 추가하는 속도를 올리는 방법
과정은 다음과 같습니다
- 가 grid.Children 컬렉션에 컨트롤을 추가 컨트롤 행 속성
- 의 값을 설정 사용자 컨트롤
- 추가 새로운 그리드 행 정의를 작성 .
시간이 걸리는 것은 4 단계입니다. 나는 이것을 할 때마다 시각적 트리가 재구성되고 있다고 생각합니다.
자식 컬렉션 업데이트를 완료 한 후에 만 시각적 트리를 다시 빌드하도록 그리드에 지시하는 방법이 있습니까?
아니면 더 좋은 방법이 있습니까?
업데이트 : WP7 Toolkit의 List Picker 컨트롤로 인해 문제가 발생했습니다. 내가 1로 바꿨을 때 나는 25 초에서 1 초로 감소 된 전화의 페이지를 표시하는 데 걸린 시간을 나 자신에게 썼다.
StackPanel을 사용하는 것이 좋습니다. 컨트롤은 GridRow 방식이 아닌 자동으로 정렬됩니다. –
격자를 스택 패널로 교체하려고 시도했지만 성능이 전혀 향상되지 않았습니다. 부모에게 컨트롤을 추가 할 때마다 부모가 스택 패널인지 그리드인지에 관계없이 시각적 트리가 다시 계산됩니다.한 번에 모든 컨트롤을 추가하는 방법이나 지시 할 때까지 페이지를 다시 작성하지 말라고하는 방법이 필요합니다. 컨트롤을 채우고 Children 컬렉션에 모든 것을 전달할 수 있도록 UIElementCollection을 만들려고했지만 생성자가 내부 생성자이므로 하나를 만들 때 오류가 발생합니다. –
UserControl 개체가 포함 된 ObservableCollection에 바인딩 된 StackPanel을 사용해 볼 수 있습니다. 처음에 ObservableCollection 속성을 null로 설정 한 다음 모든 ObservableCollection에 모든 UserControls를 추가합니다. 일단 작업이 끝나면 두 번째 ObservableCollection을 바운드 속성에 할당 한 다음 NotifyPropertyChanged 이벤트를 발생시켜 업데이트 할 페이지를 알립니다. 초기 생성 후에도 콜렉션이 변경되지 않으면 ObservableCollection을 List로 바꿀 수 있습니다. – Praetorian