2017-06-22 97 views
1

我想将Observable Collection对象绑定到列表视图。 我已经在视图模型中进行了调试,它显示集合在那里。但它似乎并没有在前端展示。绑定到ListView Xamarin Froms

这是XAML中:

<StackLayout>  



    <ListView 
       x:Name="dataList"      
       ItemsSource="{Binding routeLabels}" > 

     <ListView.ItemTemplate> 
      <DataTemplate> 
       <TextCell Text="{Binding RouteName}"/> 
      </DataTemplate> 

     </ListView.ItemTemplate> 

    </ListView> 

</StackLayout> 

背后的代码:

public partial class DriverDashboardView : ContentPage 
{ 
    private DriverDashboardViewModel driverdashboardviewmodel; 


    public DriverDashboardView() 
    { 

     InitializeComponent(); 

     this.Title = "Driver's Dashboard"; 
     BindingContext = driverdashboardviewmodel = new DriverDashboardViewModel(); 

    } 

    protected async override void OnAppearing() 
    { 
     base.OnAppearing(); 
     await driverdashboardviewmodel.GetLabelInfo(); 
    } 

} 

和视图模型:

public class DriverDashboardViewModel:BaseViewModel,INotifyPropertyChanged 
{ 


    public DriverDashboardViewModel() 
    { 


    } 

    public async Task GetLabelInfo() 
    { 
     _routelabels = await service.return_label_info(); 

    } 

    // property change handler to bind to UI 
    private ObservableCollection<RouteInfo> _routelabels; 
    public ObservableCollection<RouteInfo> routeLabels 
    { 
     get { return _routelabels; } 
     set 
     { 
      if (Equals(value, _routelabels)) return; 
      _routelabels = value; 
      OnPropertyChanged(nameof(routeLabels)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, 
       new PropertyChangedEventArgs(propertyName)); 
    } 
} 

而且RouteInfo类:

public class RouteInfo 
{ 
    public string RouteName { get; set; } 
    public int Stops { get; set; } 
    public string DayOf { get; set; } 

} 

正如我所说,我把调试视图模型,我可以看到数据在那里。 但我不能在前端看到它。

任何想法?

+0

如果您删除'ItemTemplate'你看到在你面前的条目正确数量-结束?如果是这样,那么你的模板是一个问题。如果没有,那么这听起来像是一个绑定问题。 – Mashton

回答

1

在您的DriverDashboardViewModel.GetLabelInfo()方法中,您将结果分配给_routelabels。但是_routelabels不会调用OnPropertyChanged(),这是更改所需的,以告知UI重新评估其绑定。

我建议将await service.return_label_info();的结果直接分配给routeLabels

但你也可以保持GetLabelInfo()代码,现在是这样的,只是添加以下后_routelabels分配手动跳跳虎一个UI更新:OnPropertyChanged(nameof(routeLabels));

因此,在总结做的这2两件事:

public async Task GetLabelInfo() { 
    routeLabels = await service.return_label_info(); 
} 

或者:

public async Task GetLabelInfo() { 
    _routelabels = await service.return_label_info(); 
    OnPropertyChanged(nameof(routeLabels)); 
} 
+0

工作正常!谢谢! 我会接受这个,当它让我。 – user3355961