【发布时间】:2021-07-15 06:49:05
【问题描述】:
ListView 没有更新
我在我的MerchandisersPage.xaml 中有一个ListView,当我在 SQLite 数据库中添加或删除记录时它没有更新。
MerchandiserPage.xaml 中的ListView 显示Merchandisers 列表并绑定到MerchandiserPageViewModel.cs 中的ObservableCollection
将Merchandiser 添加到数据库使用绑定到MerchansiderNewPageViewModel.cs 的MerchandiserNewPage.xaml
将Merchandiser 删除到数据库使用MerchandiserProfilePage.xaml 页面并绑定到MerchandiserProfilePageViewModel.cs
在MerchandiserNewPageViewModel(insert) 和MerchandiserProfilePage(delete) 中所做的更改不会反映在 ListView 中。
跟单员(模特)
public class Merchandiser : INotifyPropertyChanged
{
public int Id
{
get { return this.id; }
set
{
this.id = value;
OnPropertyChanged();
}
}
/// Etc....
}
MerchandisersPage.xaml(查看)
<!--Merchandiser List-->
<ListView ItemsSource="{Binding Merchandisers}"
MerchandisersPage.xaml.cs(代码隐藏)
public Models.Merchandiser SelectedMerchandiser { get; set; }
public MerchandisersPage ()
{
this.BindingContext = new ViewModels.Supervisor.MerchandisersPageViewModel();
}
MerchandisersPageViewModel(视图模型)
public ObservableCollection<Models.Merchandiser> Merchandisers { get; set; }
public MerchandisersPageViewModel()
{
Merchandisers = new ObservableCollection<Models.Merchandiser>(Database.MerchandiserDatabase.GetMerchandisers());
}
MerchandiserProfilePage.xaml(查看)
<Label Text="Name"/>
<Entry Text="{Binding SelectedMerchandiser.Name}"
MerchandiserProfilePage.xaml.cs(代码隐藏)
this.BindingContext = new ViewModels.MerchandiserProfilePageViewModel(selectedMerchandiser);
MerchandiserProfilePageViewModel.cs (ViewModel)
public Models.Merchandiser SelectedMerchandiser { get; set; }
public MerchandiserProfilePageViewModel(Models.Merchandiser selectedMerchandiser)
{
SelectedMerchandiser = selectedMerchandiser;
}
MerchandiserEditPage.xaml(查看)
<Label Text="Name"/>
<Entry Text="{Binding SelectedMerchandiser.Name}"/>
MerchandiserEditPage.xaml.cs(代码隐藏)
this.BindingContext = new ViewModels.MerchandiserEditPageViewModel(selectedMerchandiser);
MErchandiserEditPageViewModel.cs(视图模型)
public Models.Merchandiser SelectedMerchandiser { get; set; }
public MerchandiserEditPageViewModel(Models.Merchandiser selectedMerchandiser)
{
SaveCommand = new Command( async()=> {
Database.MerchandiserDatabase.SaveMerchandiser(SelectedMerchandiser);
await Application.Current.MainPage.Navigation.PopModalAsync();
});
}
MerchandiserNewPage.xaml(查看)
<Label Text="Name"/>
<Entry Text="{Binding Name}"/>
MerchandiserNewPage.xaml.cs(代码隐藏)
this.BindingContext = new ViewModels.MerchandiserNewPageViewModel();
【问题讨论】:
-
这篇文章很好地说明了一个人在发布问题时绝对应该不做的所有事情。让社区用户观看问题的视频?查看。要求用户调试整个实际程序?查看。将所有这些代码放在外部站点上,而不是让问题自成一体?查看。未能提供正确的minimal reproducible example?查看。将修订历史记录作为文本的一部分,而不是让 Stack Overflow 网站跟踪历史记录?查看。请阅读minimal reproducible example 和How to Ask,并解决问题。
-
您能否以更简洁的方式提供您如何将视图实际绑定到您的 ObservableCollection?这样比让我们看视频和搜索 repo 文件更好......
-
Listview未更新以反映删除/新记录。我正在从不同的ViewModels删除记录并将其直接添加到 SQLite 数据库中。我希望我的ListView反映这些变化。 -
感谢彼得和加布里埃尔,我将更新我的帖子以更简洁。我个人认为有一个问题的视频会更容易实际看到问题是什么?我同意用户不应该调试整个应用程序,所以我将添加一些代码并更新我的问题。
-
@minlopalis 从您的描述和代码中,我看不到您在删除或添加数据后在 MerchandisersPage OnAppearing() 方法中再次加载数据库数据的位置,我发现有关显示 sqlite 数据的相同示例ListView,你可以看看:XamarinSQLite
标签: c# listview xamarin xamarin.forms mvvm