Список обновлений Xamarin.Forms не обновляется в Android - PullRequest
0 голосов
/ 08 мая 2019

После поиска на каждом форуме в Интернете я решил опубликовать свой собственный вопрос: мои данные о просмотре списка отображаются корректно в IOS, но не в Android.Я привязываюсь к свойству в моей модели представления, и это выглядит правильно, но я не могу понять, что мне не хватает (я пытаюсь получить список заказов, чтобы заполнить мой просмотр списка).Любая помощь приветствуется!

Кроме того, я использую макет страницы с вкладками.Не уверен, если это имеет значение или нет.

//View model
public ObservableCollection<GroupedOrderModel> ListOfOrdersGrouped
{

            get { return listOfOrdersGrouped; }
            set {
                listOfOrdersGrouped = value;
                NotifyPropertyChanged("listOfOrdersGrouped");
            }
        }

    public class OrderList : List<OrderStatusInfo>
    {
        public string Heading { get; set; }
        public List<OrderStatusInfo> Orders
        {
            get { return this; }
            set { Orders = value; }
        }
    }

public async Task<bool> BuildListviewData()
{

       await Task.Run(()=> {
          ObservableCollection<GroupedOrderModel> orderList = new ObservableCollection<GroupedOrderModel>();

         if (GlobalInfo.GlobalOrderList != null && GlobalInfo.GlobalOrderList.Count > 0)
          {    

                  List<string> Headers = GlobalInfo.GlobalOrderList.Select(x => x.Status).Distinct().OrderBy(x => x).ToList();

                   foreach (var item in Headers)
                   {
                       var oGroup = new GroupedOrderModel
                       {
                           Heading = item
                       };

                       var oList = GlobalInfo.GlobalOrderList.Where(x => x.Status == item).ToList();
                       foreach (var o in oList)
                          oGroup.Add(o);

                          orderList.Add(oGroup);
                     }

                ListOfOrdersGrouped = orderList;

          }
      }
}

   //Orders.cs page
   protected async override void OnAppearing()


   {

         await ovm.BuildListviewData();
         BindingContext = ovm;        
         base.OnAppearing();
   }
//The XAML

                 <ListView x:Name="ListViewOrdersList" HasUnevenRows="True" ItemsSource="{Binding ListOfOrdersGrouped}" IsGroupingEnabled="True">
                    <ListView.GroupHeaderTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Label Text="{Binding Heading}" Margin="10"/>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.GroupHeaderTemplate>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Grid Padding="10">
                                    <Label Text="{Binding OrderNo}" FontSize="20" HorizontalOptions="Start"/>
                                </Grid>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Для тех, кто борется с той же проблемой:

В итоге проблема заключалась в том, что моя модель представления была специфичной для конкретной страницы (например, OrdersViewModel.cs для моей страницы Orders.xaml.cs). После того, как я создал AppViewModel.cs для своей страницы App.xaml.cs и поместил туда свои свойства OrdersViewModel в новый класс с именем OrdersViewModel, все это заработало, так как проект запускает страницы App.xaml и App.xaml.cs при запуске перед этим. делает что-нибудь еще. Вот почему привязка работала в IOS, а не в Android. Android пытался обработать весь код для каждой страницы с вкладками до завершения создания экземпляра привязки (поэтому данные не отображаются!).

Однако я немного подправил свой код. Вот изменения:

namespace MyApp.ViewModels
{
    public class AppViewModel
    {
        public OrdersViewModel Ovm { get; set; }
    }

    public class OrdersViewModel : INotifyPropertyChanged
    {
        public ObservableCollection<GroupedOrderModel> ListOfOrdersGrouped
        {
            get { return listOfOrdersGrouped; }
            set
            {
                listOfOrdersGrouped = value;
                NotifyPropertyChanged("ListOfOrdersGrouped");
            }
        }

        public async Task<bool> BuildListviewData() 
        {
            //Same code here as mentioned above
        }
    }

     //Deleted OrderList class mentioned above

    public class GroupedOrderModel : ObservableCollection<OrderStatusInfo>
    {
        public string Heading { get; set; }
    }
}


//Xaml
<ListView x:Name="ListViewOrdersList" HasUnevenRows="True" ItemsSource="{Binding Ovm.ListOfOrdersGrouped}" IsGroupingEnabled="True">
     <ListView.GroupHeaderTemplate>
            <DataTemplate>
                  <ViewCell>
                      <Label Text="{Binding Heading}" Margin="10"/>
                   </ViewCell>
            </DataTemplate>
      </ListView.GroupHeaderTemplate>
      <ListView.ItemTemplate>
            <DataTemplate>
                 <ViewCell>
                     <Grid Padding="10">
                        <Label Text="{Binding OrderNo}" FontSize="20" HorizontalOptions="Start"/>
                      </Grid>
                 </ViewCell>
             </DataTemplate>
       </ListView.ItemTemplate>
</ListView>

Удачного кодирования!

0 голосов
/ 09 мая 2019

Измените свойство ItemSource на

private listOfOrdersGrouped;
public ObservableCollection ListOfOrdersGrouped
{

    get { return listOfOrdersGrouped; }
    set {
        listOfOrdersGrouped = value;
        NotifyPropertyChanged("ListOfOrdersGrouped");
    }
}

NotifyPropertyChanged должно быть:

NotifyPropertyChanged("ListOfOrdersGrouped");

Чтобы имя совпадало с именем свойства, к которому вы привязываете в XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...