WP7 용 TV 목록 앱을 개발하고 있지만 피벗 컨트롤에 문제가 있습니다. 사용 가능한 모든 EPG 채널을 처음에 추가했지만 성능이 매우 떨어졌습니다 (심지어 실제 전화기), 데이터 또는 제어없이 PivotItems를 추가하기 위해 ~ 10-15 초가 소요되어 25 이 비어 있습니다.많은 PivotItem이있는 피벗
그래서 처음에는 세 개의 항목 만로드 한 다음 사용자가 왼쪽 또는 오른쪽으로 쓸어 버릴 때마다 한 번 더 추가하는 동적/지연로드 지향 접근 방식을 테스트했습니다. 문제는, 새 항목을 스 와이프하면 databound 컬렉션의 현재 슬롯을 오른쪽으로 한 슬롯 앞으로 밀어 넣고 화면에 지저분한 렌더링을 만듭니다. 즉, 은 놀랍지 않습니다. 왜냐하면 SelectedIndex는 변경되지 않지만 선택한 항목은입니다. 그러나 SelectedIndex를 수정하면 상황이 더욱 악화되어 Pivot이 일관성없는 레이아웃에 갇히게됩니다.
여기서 코드이다 :
public void ChangeChannel(){
if (index < 0) return;
int i = index;
int tot = Epg.Channels.Count;
int slack = (i == 0) ? -1 : i > oldIndex ? 1 : -1;
var ch = this.Channels[i];
var nextIndex = (ch.ChannelIndex + slack) % tot;
if (nextIndex < 0) nextIndex += tot;
var next = Epg.Channels[nextIndex];
if (!this.Channels.Contains(next))
{
if (slack < 0)
{
this.Channels.Insert(0, next);
//Index++;
}
else
this.Channels.Add(next);
}
oldIndex = i;
}
방법은 Caliburn.Micro 의해 Pivot.LoadingPivotItem에 관련된다. 인덱스이는 기본 모델 객체와 this.Channels입니다 Pivot.SelectedIndex에 Epg.Channels를 바인딩하는 것은 Pivot.ItemsSource
편집에 바인딩 된 ObservableCollection에 있습니다 : 트릭 발견. 정말 빨리 작동하는 10-12 개 이하의 탭이있는 피벗 (Pivot)이있는 RSS 리더 앱이 있다는 것을 상기했을 때 의심 스러웠습니다. 즉, Caliburn을 사용하지 않고 비슷하게 작동하는 작은 테스트 응용 프로그램을 만들었습니다. 오, 그거 성능이야! 그러나 칼리 번은 너무 무겁습니까? 정말, 내가 기본 AppBootstrapper 코드의 작은 조각 발견 이후 : Caliburn을 종료 할 필요없이, 그것은 성능을 향상 제거
ConventionManager.AddElementConvention<Pivot>(Pivot.ItemsSourceProperty, "SelectedItem", "SelectionChanged").ApplyBinding =
(viewModelType, path, property, element, convention) =>
{
if (ConventionManager
.GetElementConvention(typeof(ItemsControl))
.ApplyBinding(viewModelType, path, property, element, convention))
{
ConventionManager
.ConfigureSelectedItem(element, Pivot.SelectedItemProperty, viewModelType, path);
ConventionManager
.ApplyHeaderTemplate(element, Pivot.HeaderTemplateProperty, viewModelType);
return true;
}
return false;
};
합니다. 그래, 나도 알아, 그게 더 조사할만한 것이지만, 지금은 모든 것들을 고쳤다.
이 작업을 수행하지 마십시오. 사용자가 Pivot을 사용하여 25 개의 항목을 쓸어 넘기를 정말로 기대합니까? 피벗 (Pivot)에 약 7-8 개 이상의 항목이 없어야한다고 말한 지침을 읽은 것을 기억합니다. 이는 매우 좋은 규칙입니다. 채널을 분류하고 ListBox가 포함 된 기본 페이지를 만들거나 각 범주가 PivotItem을 차지하는 피벗 일 수도 있습니다. 사용자가 카테고리를보기 위해 선택하면 해당 카테고리의 모든 채널을 표시하는 다른 Pivot으로 이동합니다. – Praetorian
@Praetorian 물론, 앱에는 빠른 채널 선택 페이지가 있습니다. – unsafecode