2013-08-01 2 views
0

LongListSelector을 작성하여 런타임에 전화로 다운로드되는 데이터로 채 웁니다. 그룹은 모두 거기 있고 정확하다, GroupItemsPanel는 너무 정확하게 보인다. 내 문제는 GroupItemsPanel에서 선택할 때마다 내가 선택한 그룹 헤더 대신 목록이 맨 아래로 스크롤된다는 것입니다.LongListSelector GroupItemsPanel 선택이 작동하지 않습니다.

는 여기가 ItemsSource을 만드는거야 방법이 내 XAML 코드

<toolkit:LongListSelector ItemsSource="{Binding Institutions}" 
          GroupHeaderTemplate="{StaticResource GroupHeader}" 
          GroupItemTemplate="{StaticResource GroupItem}" 
          ItemTemplate="{StaticResource ItemTmpl}" 
          Grid.Row="1"> 
    <toolkit:LongListSelector.GroupItemsPanel> 
      <ItemsPanelTemplate> 
       <toolkit:WrapPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </toolkit:LongListSelector.GroupItemsPanel> 
</toolkit:LongListSelector> 

<DataTemplate x:Key="GroupHeader"> 
    <Border Background="{StaticResource OrangeHighlight}" 
      Margin="{StaticResource PhoneTouchTargetOverhang}" 
      Padding="{StaticResource PhoneTouchTargetOverhang}"> 
     <TextBlock Text="{Binding Key}"/> 
    </Border> 
</DataTemplate> 

<DataTemplate x:Key="GroupItem"> 
    <Border Background="{StaticResource OrangeHighlight}" 
      Margin="{StaticResource PhoneTouchTargetOverhang}" 
      Padding="{StaticResource PhoneTouchTargetOverhang}"> 
     <TextBlock Text="{Binding Key}" 
        Style="{StaticResource PhoneTextLargeStyle}"/> 
    </Border> 
</DataTemplate> 

<DataTemplate x:Key="ItemTmpl"> 
    <Grid> 
     <CheckBox Content="{Binding Name}" 
        Style="{StaticResource CheckBoxStyle}"/> 
    </Grid> 
</DataTemplate> 

입니다. 데이터는 Name 필드의 첫 번째 문자로 그룹화됩니다. 에 관계없이 나는 목록을 아래로 스크롤하는 GroupItemsPanel에서 선택하는 항목의

public IEnumerable<GroupingLayer<string, Field>> Institutions 
{ 
    get 
    { 
     if (m_oInstitutions == null) 
      m_oInstitutions = new List<Field>(); 
     // 
     var oGrouping = from oField in m_oInstitutions 
         group oField by oField.Name[0].ToString().ToUpper() 
         into oGroup select new GroupingLayer<string, Field>(oGroup); 
     return oGrouping; 
    } 
} 

public class Field 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
} 

public class GroupingLayer<TKey, TElement> : IGrouping<TKey, TElement> 
{ 
    private readonly IGrouping<TKey, TElement> m_oGrouping; 

    public GroupingLayer(IGrouping<TKey, TElement> oUnit) 
    { 
     m_oGrouping = oUnit; 
    } 

    public TKey Key { get { return m_oGrouping.Key; } } 

    public IEnumerator<TElement> GetEnumerator() 
    { 
     return m_oGrouping.GetEnumerator(); 
    } 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return m_oGrouping.GetEnumerator(); 
    } 
} 

. 첫 번째 항목 (일반적으로 "A")을 선택하더라도 목록은 맨 아래로 이동합니다. 왜 이런 일이 벌어지고 있는지 잘 모르겠습니다./

도와 주시면 감사드립니다.

답변

0

여전히이 특정 문제가 발생한 이유를 설명 할 수는 없지만 선택 항목을 정상적으로 작동시키는 방법을 찾았습니다.

GroupingLayer 클래스 대신에 List<>이라는 초록을 사용합니다.

public class KeyGroup<T> : List<T> 
{ 
    public string Key { get; set; } 
} 

이것은 ItemsSource가 (정상 List<>에서) 다음과 같이 생성됩니다 의미

List<Field> oFields; 
List<KeyGroup<Field>> oGroups; 
String sKey; 
Bool bFound; 
// 
oFields = GetLiveData(); 
oGroups = new List<KeyGroup<Field>>(); 
// 
foreach (var oField in oFields) 
{ 
    sKey = oField.Name[0].ToString().ToUpper(); 
    bFound = false; 
    // 
    // Loop backwards through the groups if the fields are sorted 
    for (int i = oGroups.Count - 1; i >= 0; i--) 
     if (oGroups[i].Key.Equals(sKey)) 
     { 
      oGroups[i].Add(oField); 
      bFound = true; 
      break; 
     } 
    // 
    if (!bFound) 
    { 
     oGroups.Add(new KeyGroup<Field>() { Key = sKey }); 
     oGroups[oGroups.Count - 1].Add(oField); 
    } 
} 
// 
// Set the ItemsSource to oGroups 
myLongListSelector.ItemsSource = oGroups; 

데이터에 대한이 모델은 선택이 제대로 작동 할 수 있도록 보인다 사용하지만, didn를 왜 작업은 알고있다 첫 번째 접근 방식으로 작업 ...

관련 문제