【发布时间】:2020-09-08 16:11:41
【问题描述】:
我有一个名为“TabContainerPage”的 TabbedPage,它是两个 ContentPage 的容器。
<TabbedPage.Children>
<me:TabbedPage1View Title="Tabbed Page 1" BindingContext="{Binding tabbedPage1ViewModel}" WidthRequest="400"/>
<me:TabbedPage2View Title="Tabbed Page 2"/>
</TabbedPage.Children>
在 TabContaierPageViewModel 中,我对 TabbedPage1ViewModel 有一个名为“tabbedPage1ViewModel”的属性
public TabbedPage1ViewModel tabbedPage1ViewModel { get; set; }
public TabContainerPageViewModel()
{
tabbedPage1ViewModel = new TabbedPage1ViewModel ();
}
在 TabPage1ViewModel 我有一个项目列表
private List<Items> _items;
public List<Items> items
{
get
{
return _items;
}
set
{
_items = value;
OnPropertyChanged();
}
}
我从 TabPage1View 导航到另一个名为“AddItemView”的页面。
顾名思义,我在 AddItemView 页面上添加了一个带有简单名称和描述的新项目。
当我单击返回按钮返回 TabPage1View 时,我想更新要在该页面上显示的项目列表。
我怎样才能做到这一点?
【问题讨论】:
-
使用 ObservableCollection 而不是 List,和/或在两个页面之间共享同一个 VM,或者使用 MessagingCenter,或者只是将对象引用传递给新项目
-
使用 Observable Collection 比使用 List 有什么好处?
-
添加/删除项目时,ObservableCollections 会引发 CollectionChanged 事件,以便您的 UI 可以自动更新
-
我正在从 Sqlite 数据库表中填充列表。所以从 Lists 切换到 ObservableCollections 对我来说是有利的吗?如何将 TabePage1ViewModel 的引用传递给 AddItemView?我在 TabPageContainer Xaml 中设置绑定上下文:
<me:TabbedPage1View Title="Tabbed Page 1" BindingContext="{Binding tabbedPage1ViewModel}"/> -
只需在Page2的构造函数中传递它