代码之家  ›  专栏  ›  技术社区  ›  Bad Dub

Xamarin-在iOS上显示数据的列表视图

  •  0
  • Bad Dub  · 技术社区  · 6 年前

    我的列表在UWP和Android上正确显示数据,但不适用于iOS。我想这和 OnAppearing 我正在使用的方法,当它在iOS上被调用时。

    从我的仪表板导航到项目列表页时,我在 ItemPage

    public ItemPage(string category = null, bool fromDashboard = false)
    {
        InitializeComponent();
        BindingContext = new ItemViewModel(category, fromDashboard);
    }
    
    protected override void OnAppearing()
    {
        var vm = BindingContext as ItemViewModel;
        vm?.GetData();
        base.OnAppearing();
    }
    

    然后在我的 ItemViewModel 类的构造函数接受 category fromDashboard 标记并设置一些属性。

    这个 项目视图模型 GetData() 呼叫如下:

    public void GetData()
    {
        this.Items = this.RefreshData(this.ItemService.GetAll(this.SelectedCategory));
    
        if (this.FromDashboard)
            this.Items = this.Items.Where(x => x.Status != "Complete").ToObservableCollection();
    }
    

    最后是 ItemPage.xaml 有一个 ListView ItemsSource="{Binding Items}"

    出于某种原因,这在Windows和Android上运行良好,但iOS上不会显示任何数据。页面是在OnAppearing方法或其他方法之前呈现的吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   GregorMohorko    6 年前

    在代码中编辑ViewModel属性的值时,必须调用 OnPropertyChanged 方法(来自 INotifyPropertyChanged 接口)让用户界面知道必须更新。

    就像这样:

    public void GetData()
    {
        this.Items = this.RefreshData(this.ItemService.GetAll(this.SelectedCategory));
    
        if (this.FromDashboard)
            this.Items = this.Items.Where(x => x.Status != "Complete").ToObservableCollection();
    
        OnPropertyChanged(nameof(this.Items));
    }