Xamarin Forms Listview 不会显示在我的 iPone 上。但是,它在模拟器上确实如此

Xamarin Forms Listview will not display on my iPone. However, it does on the simulator

我已经尝试了所有我能想到的和我在网上找到的所有东西,但没有任何运气,仍然是一个空白页面。

这是我的 xaml 文件;

<ListView x:Name="AutoView" ItemsSource="{Binding AutoData}" SelectedItem="{Binding SelectedItem}" SeparatorVisibility="None"  Grid.Row="1" Grid.ColumnSpan="6" BackgroundColor="Purple">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.View>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="27"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="65"/>
                                <ColumnDefinition Width="5"/>
                                <ColumnDefinition Width="55"/>
                                <ColumnDefinition Width="65"/>
                                <ColumnDefinition Width="60"/>
                                <ColumnDefinition Width="36"/>
                            </Grid.ColumnDefinitions>
                            <Label Grid.Column="0" Grid.Row="0" FontSize="Medium" TextColor="White" Text="{Binding Year}" HorizontalTextAlignment="Center"/>
                            <Label Grid.Column="2" Grid.Row="0" FontSize="Medium" TextColor="White" Text="{Binding Name}" HorizontalTextAlignment="Start" Grid.ColumnSpan="2"/>
                            <Switch x:Name="{Binding Id}" IsToggled="{Binding IsChecked, Mode=TwoWay}" Toggled="Handle_Toggled" Grid.Column="6" Grid.Row="0" Grid.ColumnSpan="2"/>
                        </Grid>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

我的视图模型中的代码如下所示,我已对其进行多次更改,但现在是这样。

    public ObservableCollection<AutoWithSwitch> MyList = new ObservableCollection<AutoWithSwitch>();
    public ObservableCollection<AutoWithSwitch> AutoData = new ObservableCollection<AutoWithSwitch>(); //{ get { return MyList; } }
    private IPopupNavigation _popup { get; set; }
    private PopupPage _modalPage;

    public event PropertyChangedEventHandler PropertyChanged;

    public UpdateCarsViewModel()
    {
        //Analytics.TrackEvent("Top of Constructor in UpdateCarsViewModel");
        GetDisplayData();
        Sort.SortOrder(MyList, i => i.Year, false);

        _popup = PopupNavigation.Instance;
        _modalPage = new PopupPage();
    }

    public void GetDisplayData()
    {
        MileageItemRepository repository = new MileageItemRepository();
        var response = repository.GetAuto2();

        //MyList.Clear();
        foreach (var item in response)
        {
            Analytics.TrackEvent("Car Data GetDisplayData: carId " + item.Id + " Name = " + item.CarDesc + " Year = " + item.CarYear);
            
            AutoData.Add(new AutoWithSwitch
            {
                Id = item.Id,
                Year = item.CarYear,
                Name = item.CarDesc,
                IsChecked = item.IsDefault
            });
            
            Analytics.TrackEvent("In GetDisplayData in UpdateCarsViewModel CarYear = " + item.CarYear);
        }
        //AutoData = MyList;
    }

如您所见,我已经在那里登录,我可以看到正在从 DB table 检索汽车信息,只是不会显示。

根据您的代码片段,ListView 控件绑定到 AutoData 类型的 ObservableCollection,列表视图一侧的数据将绑定到 class AutoWithSwitch 的四个属性: IdYearNameIsChecked。 因此,您应该声明并使用 AutoData with set 和 get 属性,如下所示:

public class UpdateCarsViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private ObservableCollection<AutoWithSwitch> mylist;
    public ObservableCollection<AutoWithSwitch> AutoData
    {
        get { return mylist; }
        set { mylist = value; }
    }
    public UpdateCarsViewModel()
    {
        GetDisplayData();
    }

    public void GetDisplayData()
    {
        //get data logic 
        AutoData = new ObservableCollection<AutoWithSwitch>()
        {
            new AutoWithSwitch()
            {
                Id = "1",
                Year = "2022",
                Name = "Steve_Jobs",
                IsChecked = false
            }
        };
    }
  }
}

注意:请确保您可以成功从下面检索数据,

MileageItemRepository repository = new MileageItemRepository();
var response = repository.GetAuto2();

这很有帮助并回答了我的问题。希望这就是您回答它有帮助的意思。