title: Xamarin Forms Custom Control only Notify Model on change ItemSelected
body: <p>Hi guys I am having some problems in my Xamarin Forms Project, in my app, a ListView show many row of data in columns (500++), the Xamarin Forms ListView rendering was so slow (and consuming ram in scroll), then I create a Custom Control to use a native ListView, it was very helpful and now the rendering speed is not a problem(also the ram consumo in scroll is not a problem).</p>
  
  <p>But the use of this method have a problem, now when I edit a textbox embedded in a row of the listview, the property on the model is not notified but only is notificated when I change the ItemSelected.</p>
  
  <p>// My Custom Control</p>
  
  <pre><code>public class NativeListView : ListView
      {
          public NativeListView()
          {
          }
      }
  </code></pre>
  
  <p>// My Custom Control Renderer</p>
  
  <pre><code>[assembly: ExportRenderer(typeof(NativeListView), typeof(NativeListViewRenderer))]
  namespace AppName.UWP.NativeCode.CustomControlsRenderers
  {
    public  class NativeListViewRenderer : ListViewRenderer
      {
          protected override void OnElementChanged(ElementChangedEventArgs&lt;Xamarin.Forms.ListView&gt; e)
          {
              base.OnElementChanged(e);
  
              if (Control is ListView listView)
              {
                  listView.ItemTemplate = App.Current.Resources["NativeListViewItemTemplate"] as DataTemplate;
              }
          }
      }
  }
  </code></pre>
  
  <p>// My DataTemplate</p>
  
  <pre><code>&lt;DataTemplate x:Key="NativeListViewItemTemplate"&gt;
                  &lt;Grid&gt;
  
                      &lt;Grid.ColumnDefinitions&gt;
                          &lt;ColumnDefinition Width="*"/&gt;
                          &lt;ColumnDefinition Width="*"/&gt;
                      &lt;/Grid.ColumnDefinitions&gt;
  
                      &lt;TextBox Grid.Column="0"
                               Text="{Binding Value, Mode=TwoWay}"/&gt;
  
                      &lt;TextBlock Grid.Column="1"
                                 Foreground="Red"
                                 Text="{Binding Validate}"/&gt;
  
                  &lt;/Grid&gt;
              &lt;/DataTemplate&gt;
  </code></pre>
  
  <p>// My Page XAML</p>
  
  <pre><code>&lt;customcontrols:NativeListView
                          Grid.Row="2"
                          VerticalOptions="FillAndExpand"
                          SelectionMode="Single"
                          ItemsSource="{Binding NativeListView_ItemsSource}"/&gt;
  </code></pre>
  
  <p>// My PageViewModel</p>
  
  <pre><code>public class Model : BindableBase
          {
              private string _value;
              public string Value
              {
                  get { return _value; }
                  set { SetProperty(ref _value, value, () =&gt; RaisePropertyChanged(nameof(Validate))); }
              }
  
              public string Validate
              {
                  get
                  {
                      if (string.IsNullOrWhiteSpace(Value))
                      {
                          return "❌";
                      }
                      return "✔";
                  }
              }
          }
  
          private ObservableCollection&lt;Model&gt; nativeListView_ItemsSource;
          public ObservableCollection&lt;Model&gt; NativeListView_ItemsSource
          {
              get { return nativeListView_ItemsSource; }
              set { SetProperty(ref nativeListView_ItemsSource, value); }
          }
  </code></pre>
  
  <p>// Ctor:</p>
  
  <pre><code>NativeListView_ItemsSource = new ObservableCollection&lt;Model&gt;
              {
                  new Model(){Value="8"},new Model(){Value="1"},new Model(){Value=""},
                  new Model(){Value="6"},new Model(){Value=""},new Model(){Value="4"},
                  new Model(){Value="7"},new Model(){Value="5"},new Model(){Value="7"},
              };
  </code></pre>