2014-11-05 62 views
1

我正在使用列表視圖綁定作爲我的xamarin表單的一部分。即使在通過xaml完成數據綁定後,我也無法將數據更新爲列表視圖。通過調試我發現,PropertyChanged事件爲null。獲取此事件爲空的原因是 - 「未正確設置數據上下文」。我也設置了數據上下文,但沒有數據填充在列表視圖中。即使設置了xamarin表單中的Bindingcontext之後,PropertyChanged事件仍爲null

這是我的代碼。

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事件是空的,我沒有看到我的列表視圖中的任何數據。

在此先感謝。

+0

我想嘗試LoadFromXaml後設置的BindingContext。 – 2014-11-05 08:50:58

+0

嗨Miha,謝謝你的回覆。我嘗試移動綁定上下文。我仍然看到ViewModel類中的PropertyChanged事件爲null,並且我的列表視圖未更新。 :-( – 2014-11-05 09:08:05

回答

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; 
     } 
    } 
} 
相關問題