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);
}
}
}
}
WP8의 모든 WebRequest 콜백은 백그라운드 스레드에서 수행됩니다. 웹 요청 후에 UI를 업데이트하려면 UI Dispatcher 스레드에 있어야합니다. – JustinAngel