如何解决从另一个 ViewModel 添加/删除记录时,ListView 不会更新?
ListView 未更新
我的 ListView
中有一个 MerchandisersPage.xaml
,当我在 sqlite 数据库中添加或删除记录时,它没有更新。
ListView
中的 MerchandiserPage.xaml
显示 Merchandisers
的列表并绑定到 ObservableCollection
中的 MerchandiserPageviewmodel.cs
向数据库添加 Merchandiser
使用绑定到 MerchandiserNewPage.xaml
的 MerchansiderNewPageviewmodel.cs
将 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 (viewmodel)
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(视图模型)
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();
解决方法
我必须将绑定上下文设置为 TextEditingController dateCtl = TextEditingController();
CustomFromField(
heading: getTranslated(context,"date_sample"),controller:dateCtl,onTap: () async{
DateTime date = DateTime.now();
FocusScope.of(context).requestFocus(new FocusNode());
final DateTime picked = await showDatePicker(
context: context,initialDate:date,firstDate:DateTime(1900),lastDate: DateTime(2100));
dateCtl.text = date.toIso8601String();
},),
方法,该方法被覆盖后,允许在页面可见之前立即进行行为。
OnAppearing()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。