2014-11-05 1 views
1

Я работаю с привязками вида списка как часть моих форм xamarin. Я не смог увидеть обновленные данные для просмотра списка даже после привязки данных через xaml. При отладке я заметил, что событие PropertyChanged равно null. Причиной получения этого события является «Не задавать контекст данных должным образом». Я также установил контекст данных, но в списке списка данные не заполнены.Событие PropertyChanged равно null даже после установки Bindingcontext в формах xamarin

Вот мой код.

SampleCode.Xaml

<ContentPage 
    Title="ListViewBinder" 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:SampleNS;assembly=SampleNS" 
    x:Class="SampleNS.SampleCode"> 
<ContentPage.Content> 
     <StackLayout Orientation="Vertical" VerticalOptions="FillAndExpand" > 
      <ListView x:Name= "listView" ItemsSource="{Binding lsData}" > 
          <ListView.ItemTemplate> 
           <DataTemplate> 
            <ViewCell> 
             <ViewCell.View> 
              <Label Text="{Binding Name}"></Label> 
             </ViewCell.View> 
            </ViewCell> 
           </DataTemplate> 
          </ListView.ItemTemplate> 
        </ListView> 
       </StackLayout> 
</ContentPage.Content> 

ViewModel.cs

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Runtime.CompilerServices; 

namespace SampleNS 
{ 
    public class ViewModel : INotifyPropertyChanged 
    { 
     private string _name; 

     public string Name 
     { 
      get {return _name;} 
      set { 
        if (value.Equals(_name, StringComparison.Ordinal)) 
        { 
         return; 
        } 
        _name = value; 
       OnPropertyChanged(_name); 
       } 

     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     void OnPropertyChanged ([CallerMemberName] string propertyName=null) 
     { 
      var handler = PropertyChanged; 
      if (handler != null) { 
       handler (this, new PropertyChangedEventArgs (propertyName)); 
      } 
     } 
    } 
} 

SampleCode.Xaml.cs

using System; 
using System.Collections.Generic; 
using Xamarin.Forms; 
using Xamarin.Forms.Xaml; 

namespace SampleNS 
{ 
    public partial class SampleCode : ContentPage 
    { 
     public static List<ViewModel> lsData; 


     private void init() 
     { 

      //this.BindingContext = lsData; 
      this.BindingContext = new ViewModel(); 


      this.LoadFromXaml (typeof(SampleCode)); 

      lsData = new List<ViewModel>() { 
           new ViewModel { Name = "VM1" }, 
           new ViewModel { Name = "VM2" }, 
           new ViewModel { Name = "VM3" }, 
           new ViewModel { Name = "VM4" }, 

     } 

Я предположил BindingContext такой же, как DataContext в WPF. (Пожалуйста, предложите, если я ошибаюсь)

Я сомневаюсь в установке BindingContext. Пожалуйста, предложите мне, где я делаю ошибку. В настоящее время мое событие PropertyChanged равно null, и я не вижу никаких данных в моем списке.

Заранее спасибо.

+0

Я бы попробовать установить BindingContext после LoadFromXaml. –

+0

Привет, Миха, спасибо за ваш ответ. Я попытался переместить контекст привязки. Тем не менее я вижу, что событие PropertyChanged равно null в классе ViewModel, и мое представление списка не обновляется. :-( –

ответ

0

вы образец code.xaml.cs должен выглядеть следующим образом:

using System; 
using System.Collections.Generic; 
using Xamarin.Forms; 
using Xamarin.Forms.Xaml; 

namespace SampleNS 
{ 
    public partial class SampleCode : ContentPage 
    { 
     public static List<ViewModel> lsData; 

     public SampleCode() 
     { 
      InitializeComponent(); 

      lsData = new List<ViewModel>() { 
          new ViewModel { Name = "VM1" }, 
          new ViewModel { Name = "VM2" }, 
          new ViewModel { Name = "VM3" }, 
          new ViewModel { Name = "VM4" }, 
      this.BindingContext = lsData; 
     } 
    } 
} 
Смежные вопросы