Я перепробовал все, что мог придумать, и все, что нашел в Интернете, и мне не повезло, все еще пустая страница.
вот мой файл 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;
}
Как видите, у меня есть вход в систему, и я вижу, что информация об автомобиле извлекается из таблицы БД, но она просто не отображается.
В соответствии с вашими фрагментами кода элементы управления Посмотреть список привязываются к AutoData
типа ObservableCollection, а данные в представлении списка будут привязываться к свойствам класса AutoWithSwitch для четырех свойств:
Id
, Year
, Name
и IsChecked
.
Таким образом, вы должны требовать и использовать AutoData со свойством 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();
Да, это было полезно. Я просто немного изменил то, что было выше, чтобы обрабатывать более одного элемента за раз, и это сработало отлично. Я сделал это на других моих страницах, которые не отображались, и теперь они также отображаются нормально. Огромное спасибо! Я потратил часы, пытаясь решить эту проблему, поэтому ваша помощь была БОЛЬШОЙ признательна
Это было полезно и ответило на мой вопрос. Надеюсь, это то, что вы имели в виду, отвечая, что это было полезно.
AutoData
не является собственностью. Вы можете привязываться только к общедоступным свойствам.