微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个 ViewModel 添加/删除记录时,ListView 不会更新?

如何解决从另一个 ViewModel 添加/删除记录时,ListView 不会更新?

ListView 未更新 我的 ListView 中有一个 MerchandisersPage.xaml,当我在 sqlite 数据库添加删除记录时,它没有更新。

ListView 中的 MerchandiserPage.xaml 显示 Merchandisers 的列表并绑定到 ObservableCollection 中的 MerchandiserPageviewmodel.cs

数据库添加 Merchandiser 使用绑定到 MerchandiserNewPage.xamlMerchansiderNewPageviewmodel.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 举报,一经查实,本站将立刻删除。