【问题标题】:ListView will not update when adding/removing records from another ViewModel?从另一个 ViewModel 添加/删除记录时,ListView 不会更新?
【发布时间】:2021-07-15 06:49:05
【问题描述】:

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

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

Merchandiser 添加到数据库使用绑定到MerchansiderNewPageViewModel.csMerchandiserNewPage.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 exampleHow to Ask,并解决问题。
  • 您能否以更简洁的方式提供您如何将视图实际绑定到您的 ObservableCollection?这样比让我们看视频和搜索 repo 文件更好......
  • Listview 未更新以反映删除/新记录。我正在从不同的ViewModels 删除记录并将其直接添加到 SQLite 数据库中。我希望我的ListView 反映这些变化。
  • 感谢彼得和加布里埃尔,我将更新我的帖子以更简洁。我个人认为有一个问题的视频会更容易实际看到问题是什么?我同意用户不应该调试整个应用程序,所以我将添加一些代码并更新我的问题。
  • @minlopalis 从您的描述和代码中,我看不到您在删除或添加数据后在 MerchandisersPage OnAppearing() 方法中再次加载数据库数据的位置,我发现有关显示 sqlite 数据的相同示例ListView,你可以看看:XamarinSQLite

标签: c# listview xamarin xamarin.forms mvvm


【解决方案1】:

我必须将绑定上下文设置为 OnAppearing() 方法,当被覆盖时,允许在页面变得可见之前立即进行行为。

protected override void OnAppearing()
{
   base.OnAppearing();
   this.BindingContext = new ViewModels.Supervisor.MerchandisersPageViewModel();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多