2015-07-15 7 views
0

У меня возникли проблемы с привязкой ListView из Odata, когда я работал с локальным Db, я смог выполнить привязку данных, возвращая список в моем классе ModelView в мою переменную списка через метод get, но с Odata метод Async, поэтому я не могу вернуть список, а некоторые, как если бы я заполнил переменную в методе, она не работает, и в этот момент я не могу найти решение, если кто-то может мне помочь, я буду очень признателен, вот мой код до сих пор:Binding Odata Xamarin Xaml

ViewModel класс:

public class Page1ViewModel 
{ 


    public string Nombre { set; get; } 
    public string Direccion { set; get; } 
    public string Descripcion { set; get; } 
    public string Logo { set; get; } 

    public List<Restaurant> RestaurantDb { get; set; } 

    public async void GetRestaurant() 
    { 
     String str = ""; 
     try 
     { 
      var x = ODataDynamic.Expression; 
      var client = new ODataClient("http://192.168.0.9/WSTestDev/WSTestDev.svc/"); 
      var packages = await client.FindEntriesAsync("Restaurant"); 
      foreach (var package in packages) 
      { 
       var rt = new Restaurant 
       { 
        Nombre = package["Nombre"].ToString(), 
        Direccion = package["Direccion"].ToString(), 
        Descripcion = package["Descripcion"].ToString(), 
        Logo = package["Logo"].ToString() 
       }; 

       RestaurantDb.Add(rt); 

      } 



     } 
     catch (Exception err) 
     { 

      str = err.ToString(); 
     } 

    } 
} 

Просмотр класс:

public partial class Page1 : ContentPage 
{ 
    public Page1ViewModel vm; 
    public Page1() 
    { 
     vm = new Page1ViewModel(); 
     vm.GetRestaurant(); 
     BindingContext = vm; 
     InitializeComponent(); 

    } 

ответ

0

Вместо List<Restaurant> использовать ObservableCollection<Restaurant>. Он ведет себя аналогично List, но уведомляет пользовательский интерфейс о любых изменениях его содержимого, чтобы пользовательский интерфейс мог обновлять.

Альтернативно, вы могли бы await vm.GetRestaurant(), но для этого потребуется большая реструктуризация вашего кода.

+0

Что мне нужно, чтобы получить «ожидание vm.GetRestaurant()»? потому что я просто использую некоторые точки останова в классе представления, и он выполняет все инструкции, но хотя метод «GetRestaurant» выше «привязки» и «инициализации», метод запускается после них, и я предполагаю, что это Проблема (?) – elunap

+0

Вы не можете вызвать метод async из конструктора, и вы можете вернуть void из метода async. Вам нужно будет изменить свой код, чтобы исправить обе эти вещи. Или просто измените список на ObservableCollection – Jason