2017-02-06 8 views
0

VisualStudio 2015, UWP, C#ListView не всегда обновлять DataBound строки из WCF службы вызова, UWP C#

Я пытаюсь обновить данные после подачи отмеченных элементов и обновления базы данных через WCF службу. Проверенные элементы следует всегда удалять после обновления. Иногда (1 из 5 раз) он не удаляет все элементы проверки при обновлении. Но если я нажму кнопку обновления второй или второй, то новые данные правильно заполняют список. Любые идеи, почему это не всегда работает? Я новичок в UWP, поэтому я просто покараю его сейчас.

[Undo][Refresh][Submit] 
----------------------- 
     Item 1 
----------------------- 
     Item 2 
----------------------- 
     Item 3 
----------------------- 
√  Item 4 
----------------------- 
√  Item 5 
----------------------- 

Submit проверка кнопки значок в меню

private void SubmitDropOffButton_Click(object sender, RoutedEventArgs e) 
    { 
     bool needsRefresh = false; 

     for (int i = 0; i < ShipListView.Items.Count; i++) 
     { 
      var container = ((ListViewItem)(ShipListView.ContainerFromItem(ShipListView.Items[i]))); 
      var chk = Child<CheckBox>(container, "ItemCheckBox"); 

      if (chk != null) 
      { 
       if (chk.IsChecked == true) 
       { 
        ServiceLocal.ShipGroup ShipGroup = (ServiceLocal.ShipGroup)container.Content; 
        WriteSubmitDropOff(ShipGroup.id); 
        needsRefresh = true; 
       } 
      } 

     } 

     if (needsRefresh == true) 
     { 
      RefreshDropOffButton_Click(null, null); 
     } 

    } 

оставивших выбранных элементы

private async void WriteSubmitDropOff(int id) 
    { 
     try 
     { 
      ServiceLocal.Service1Client client = new ServiceLocal.Service1Client(); 
      await client.SubmitDropOffAsync(id); 
      await client.CloseAsync(); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

Обновить ListView

private async void RefreshDropOffButton_Click(object sender, RoutedEventArgs e) 
    { 
     ServiceLocal.Service1Client client = new ServiceLocal.Service1Client(); 
     var itemSource = await client.GetShipData2Async(1); 
     ShipListView.ItemsSource = null; 
     ShipListView.ItemsSource = itemSource; 
     await client.CloseAsync(); 
    } 
+0

Возможно, вам, возможно, придется ждать WriteSubmitDropOff с задачей . Похоже, что ваша обработка все еще выполняется, пока обновление завершено. – AbsoluteSith

+0

@AbsoluteSith Это звучит как реалистичное предложение, как бы я это сделал? – TroyS

ответ

1

Замените их в своем коде.

bool result = await WriteSubmitDropOff(ShipGroup.id); 
private async Task<bool> WriteSubmitDropOff(int id) 
{ 
    try 
    { 
     ServiceLocal.Service1Client client = new ServiceLocal.Service1Client(); 
     await client.SubmitDropOffAsync(id); 
     await client.CloseAsync(); 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
    return true; 
} 
+0

Просто примечание: это работает до тех пор, пока вы отмечаете метод вызова с помощью модификатора «async». – TroyS