2013-01-04 2 views
0

ItemRealized 이벤트 및 해당 작업을 사용하여 LongListSelector 컨트롤을 사용하고 있지만 LongListSelector의 ItemSource에 할당 된 목록을 업데이트하면 LongListSelector의 항목이 업데이트되지 않습니다.longlistselector의 자동 업데이트

다음은 XAML에서 사용하는 코드입니다.

<phone:LongListSelector SelectionChanged="listBoxGroups_SelectionChanged_1" Grid.Row="1" x:Name="longListSelector" ItemTemplate="{StaticResource groupsItemTemplate}" Margin="0,100,0,0"> 
</phone:LongListSelector> 

코드 숨김.

public GroupsMainPage() 
{ 
     InitializeComponent(); 
     longListSelector.ItemRealized += longListSelector_ItemRealized; 
     this.Loaded += GroupsMainPage_Loaded; 
} 


void longListSelector_ItemRealized(object sender, ItemRealizationEventArgs e) 

    { 
     if (!controller.IsLoading && longListSelector.ItemsSource != null && longListSelector.ItemsSource.Count >= 100) 
     { 
      if (e.ItemKind == LongListSelectorItemKind.Item) 
      { 
       if ((e.Container.Content as Result).Equals(longListSelector.ItemsSource[longListSelector.ItemsSource.Count -7])) 
       { 
        connectToWebService(); 

       } 
      } 
     } 
    } 

웹 서비스에서 응답을받은 후 간단히 다음을 수행하십시오.

private void WebServiceSuccessAction(Object obj) 
{ 
    GroupModel.getInstance().GetGroupResponse((GroupResponse)obj); 
    if (GroupModel.getInstance().GetGroupResponse().Response.errorCode == 0) 
    { 
     controller = new GroupController(); 
     if (fetchNumberofGroups <= 100) 
     { 
       this.ResultList = controller.GetGroupList(); 
       longListSelector.ItemsSource = this.ResultList; 

     } 
     else 
     { 
       controller.addNewGroupData(); 
       this.ResultList = controller.GetGroupList(); 

     } 
    } 
    else 
    { 
     List<Error> error = ConfigModel.getInstance().getConfigResponse().Response.data.errors; 
     foreach (Error err in error) 
     { 
      if (err.code == GroupModel.getInstance().GetGroupResponse().Response.errorCode) 
      { 
       MessageBox.Show(err.text); 
      } 
     } 
    } 
} 

답변

3

나는 해결책을 알아 냈다. 문제는 입니다. controller.addNewGroupData(); this.ResultList = controller.GetGroupList();

Deployment.Current.Dispatcher.BeginInvoke(() => 
        {});block 

I-E에있을 것이다.

Deployment.Current.Dispatcher.BeginInvoke(() => 
        { 
         controller.AddNewGroupData(); 
         this.ResultList = controller.GetGroupList(); 
        }); 

잘 작동합니다. 나는 많은 것을 연구했지만이 블록은 마이크로 소프트 (트위터의 예)를 제외한 다른 웹 사이트에서는 언급되지 않았다.

+1

WP8의 모든 WebRequest 콜백은 백그라운드 스레드에서 수행됩니다. 웹 요청 후에 UI를 업데이트하려면 UI Dispatcher 스레드에 있어야합니다. – JustinAngel

1

요소를 업데이트하려면 LongListSelector는 소스가 업데이트 될 때 NotificationChange를 수신해야합니다. 따라서 List 대신 ObservableCollection을 사용해야합니다.

+0

그랩리스트 은 longlistselector와 아무런 관련이 없습니다. 일부 오류 메시지에 대해서만 목록을 사용하고 있습니다. –