2017-12-28 13 views
0

ここで少し問題に直面しています。コードは正常ですが、アプリケーションはWebAPIデータベースに挿入している正しいリストをバインドしていません。私は達成するために何を期待C#ListViewアプリケーションでJSON rest APIを使用してWeb APIを参照 - 空白を返します。

:クロスプラットフォームで

リストビュー、この場合には、私は次のようにWebAPIのコード内のすべてのデータを一覧表示している、アンドロイドでテストしている:ここで

は、JSONですここではWebAPIの

[{"Id":1,"BusinessName":"La ventana","BusinessFantasyName":"La Ventana","BusinessArea":"Restaurante","BusinessSpecificArea":"Pizzaria","Country":"Brasil","State":"RS","City":"Rio Grande","Adress":"Av Rio Grande","Neighbourhood":"Cassino","Number":"134","Complement":"Casa","Latitude":-32.1853837,"Longitude":-52.1582284,"DateOfReg":"26/12/2017","DateOfMod":"26/12/2017","BusinessStatus":"Ativo","RegisteredBy":"Daniel Serrão"},{"Id":2,"BusinessName":"Supermercado Granabara - Cassino","BusinessFantasyName":"Supermercado Granabara - Cassino","BusinessArea":"Supermercados","BusinessSpecificArea":"Bens e Consumo","Country":"Brasil","State":"RS","City":"Rio Grande","Adress":"Av Rio Grande","Neighbourhood":"Cassino","Number":"150","Complement":"NA","Latitude":-32.1845922,"Longitude":-52.1591549,"DateOfReg":"26/12/2017","DateOfMod":"26/12/2017","BusinessStatus":"Ativo","RegisteredBy":"Daniel Serrão"}] 

に上場しているファイルのコードは、このWEBAPIを相談するために、次のとおりです。

namespace Icquire.RestClient 
{ public class RestClient<T> 
{ 
private const string WebServiceUrl = "http://localhost:58173/api/BusinessRegs/"; 

    public async Task<List<T>> GetAsync() 
    { 
     var httpClient = new HttpClient(); 
     var json = await httpClient.GetStringAsync(string.Format(WebServiceUrl)); 
     var BusinessReg = JsonConvert.DeserializeObject<List<T>>(json); 
     return BusinessReg; 
    } 

    public async Task<bool> PostAsync(T t) 
    { 
     var httpClient = new HttpClient(); 
     var json = JsonConvert.SerializeObject(t); 
     HttpContent httpContent = new StringContent(json); 
     httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
     var result = await httpClient.PostAsync(WebServiceUrl, httpContent); 
     return result.IsSuccessStatusCode; 
    } 

    public async Task<bool> PutAsync(int Id, T t) 
    { 
     var httpClient = new HttpClient(); 
     var json = JsonConvert.SerializeObject(t); 
     HttpContent httpContent = new StringContent(json); 
     httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
     var result = await httpClient.PostAsync(WebServiceUrl + Id, httpContent); 
     return result.IsSuccessStatusCode; 
    } 

    public async Task<bool> DeleteAsync(int Id, T t) 
    { 
     var httpClient = new HttpClient(); 
     var response = await httpClient.DeleteAsync(WebServiceUrl + Id); 
     return response.IsSuccessStatusCode;   
    } 



}} 
ここで

namespace Icquire.Services 

{ public class BusinessRegServices 
{ public async Task<List<BusinessReg>> GetBusinessRegAsync() 

    { 
     RestClient<BusinessReg> restClient = new RestClient<BusinessReg>(); 
     var BusinessRegList = await restClient.GetAsync(); 
     return BusinessRegList; 
    } 
} 

}

データを表示するためのコードです:

namespace Icquire.ViewModel 
{ public class BusinessRegView : INotifyPropertyChanged 
{ 
    private List<BusinessReg> _BusinessRegList 
    { 
     get { return _BusinessRegList; } 
     set 
     { 
      _BusinessRegList = value; 
      OnPropertyChanged(); 
     } 
    } 


    public List<BusinessReg> BusinessRegList { get; set; } 


    public BusinessRegView() 
    { 
     InitializeDataAsync(); 
    } 

    private async Task InitializeDataAsync() 
    { 
     var businessRegServices = new BusinessRegServices(); 

     BusinessRegList = await businessRegServices.GetBusinessRegAsync(); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
}; 

}

そして、ここでの私であるここ

は内部サービスのためのコードですcontentPage内のListView:

<ListView ItemsSource="{Binding BusinessRegList}" HasUnevenRows="True" > 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ViewCell> 
         <StackLayout Orientation ="Vertical"> 
          <Label TextColor="Silver" Text="{Binding BusinessName}"/> 
          <Label TextColor="Silver" Text="{Binding Adress}"/> 
          <Label TextColor="Silver" Text="{Binding Number}"/> 
         </StackLayout> 
        </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

上記のコードでは、ListViewのバインディングが空白に戻ります。 Jsonがcorretly生成しているので、私は問題がJsonファイルへのConsultingにあると思う。またはサービスコードの内部。誰かがヒントを持っていますか?

ありがとうございます。 ダニエル。

答えて

0

サービスコールが実際にデータを返していると仮定して、バインド設定が正しいとします。あなたのプロパティの宣言が正しくない

、それは次のようになります。

private List<BusinessReg> _BusinessRegList; 

public List<BusinessReg> BusinessRegList 
{ 
    get { return _BusinessRegList; } 
    set 
    { 
    _BusinessRegList = value; 
    OnPropertyChanged(); 
    } 
} 

詳しい情報はProperties (C# Programming Guide)で見つけることができます。

+0

不運にも機能しませんでした。 変更後もAppが実行されませんでした。 –

関連する問題