title: Xamarin Forms ListView Binding issue
body: <p>Im having a problem with data binding in Xamarin forms ListView</p>
  
  <ol>
  <li>I have class that holds the data to be bind, at run time i see data in the object.</li>
  <li>i created an ObservableCollection that i'm adding my objects in a loop into it, at run time i see the objects and there data are in this object</li>
  <li>Im adding ItemSource to the list And ItemTemplate as well.</li>
  <li>the Items are added to the listView but at run time the Label name is null.</li>
  </ol>
  
  <p>this is the page code:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using Punteam.GetTraderStatusApi;
  using Punteam.ReceiveTraderStatusApi;
  using Xamarin.Forms;
  using System.Threading;
  using System.Threading.Tasks;
  using Newtonsoft.Json.Schema;
  using Newtonsoft.Json;
  using Newtonsoft.Json.Serialization;
  using Newtonsoft.Json.Linq;
  using XLabs.Forms.Controls;
  using System.Collections;
  using System.Collections.ObjectModel;
  using Punteam.RequestChatMessages;
  using Punteam.ReceiveChatMessages;
  using System.Diagnostics;
  
  namespace Punteam
  {
  
  public partial class ChatForm : ContentPage
  {
      ObservableCollection &lt;chatDataSource&gt; source;
      StatusAPI getStatus;
      bool KeyboardStatus = false;
  
  
      public ChatForm ()
      {
          InitializeComponent ();
          if (Device.OS == TargetPlatform.iOS) {
              txtMsg.HeightRequest = 34;
              btnTxt.HeightRequest = 34;
              btnPick.HeightRequest = 60;
          }
  
  
          double bottomOffset;
          Int32 i = 0;
          getStatus = new StatusAPI ();
          getStatus.json.memberList [0].memberId = App.memberId;
          getStatus.json.pType = Constants.pTypeTraderStatus;
          SendRequest (getStatus, Constants.pTypeTraderStatus, this);
  
  
          btnTxt.Clicked += (object sender, EventArgs e) =&gt; {
              i++;
              System.Diagnostics.Debug.WriteLine ("In button Clicked: " +   i.ToString ());
              if (Device.OS == TargetPlatform.Android) {
                  btnPick.IsVisible = true;
              }
              txtMsg.Text = "";
          };
  
  
          KeyboardHelper.KeyboardChanged += (sender, e) =&gt; {
              if (KeyboardStatus) {
              } else {
              }
              bottomOffset = mainStack.Bounds.Bottom -     textStack.Bounds.Bottom;   // This offset allows us to only raise the     stack by the amount required to stay above the keyboard. 
                  textStack.TranslationY -= e.Visible ? e.Height -       bottomOffset : bottomOffset - e.Height;  // The textStack is translated up,  and then returned to original position.
          };
      }
  
  
      public  static async Task&lt;string&gt; SendRequest (Object obj, String    pType, ChatForm chat)
      {
          // Get Trader status    
          String jsonSring = "";
          Utils util = new Utils ();
          jsonSring = util.deserialze (obj);
          var result = await Http.SendData (Constants.serverAddress, jsonSring, true);
          string inputStr = (string)result;
          Punteam.ReceiveTraderStatusApi.RootObject traderStatus = new    Punteam.ReceiveTraderStatusApi.RootObject ();
          traderStatus =  JsonConvert.DeserializeObject&lt;Punteam.ReceiveTraderStatusApi.RootObject&gt;   (inputStr);
  
          // Get Chat last messages
          ChatdAPI chatApi = new ChatdAPI ();
          chatApi.json.pType = Constants.puTypeGetChatMessages; 
          chatApi.json.memberList [0].memberId = App.memberId;
          jsonSring = "";
          jsonSring = util.deserialze (chatApi);
          result = await Http.SendData (Constants.serverAddress, jsonSring, true);
          Punteam.ReceiveChatMessages.ReceivedMemberMessages memberMessages = new Punteam.ReceiveChatMessages.ReceivedMemberMessages ();
          memberMessages = JsonConvert.DeserializeObject&lt;Punteam.ReceiveChatMessages.ReceivedMemberMessages&gt; (result);
  
          chat.fillChatList (memberMessages);
          return result;
      }
  
      public void fillChatList   (Punteam.ReceiveChatMessages.ReceivedMemberMessages memberMessages)
      {
          var chatLine = new chatDataSource ();
          source = new ObservableCollection&lt;chatDataSource&gt; ();
          Int32 chatIndex = memberMessages.MemberChatMessagesData.Count;
          for (int i = 0; i &lt; chatIndex; i++) {
              chatLine = new chatDataSource ();
              chatLine.senderName = memberMessages.MemberChatMessagesData [i].SenderName;
              chatLine.text = memberMessages.MemberChatMessagesData [i].Message;
              source.Add (chatLine);
          }
  
          chatList.ItemsSource = source;
  
          chatList.ItemTemplate = new DataTemplate (() =&gt; {
  
  
              var name = new Label ();
  
              return new ViewCell{ View = name };
          });
      }
  
      public void txtMsgFocused (Object s, EventArgs a)
      {
          if (Device.OS == TargetPlatform.Android) {
              btnPick.IsVisible = false;
          }
      }
  
      public void txtMsgCompleted (Object s, EventArgs a)
      {
          if (Device.OS == TargetPlatform.Android) {
              btnPick.IsVisible = true;
          }
  
      }
      *
      public void sendClicked (Object s, EventArgs a)
      {
          if (Device.OS == TargetPlatform.Android) {
              btnPick.IsVisible = true;
          }
  
      }
  
      public void itemTapped (Object s, EventArgs a)
      {
          if (Device.OS == TargetPlatform.Android) {
              btnPick.IsVisible = true;
          }
      }
  
  
  }
  
  public class chatDataSource
  {
      public string senderName = "";
      public string text = "";
  }
  }
  </code></pre>