我有一个名为“ 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页面上添加了一个带有简单名称和说明的新Item。
当我单击“后退”按钮返回TabPage1View时,我想更新要在该页面上显示的项目列表。
我该怎么做?
答案 0 :(得分:1)
首先,将List更改为ObservableCollection。
ObservableCollection本身实现了OnPropertyChanged,这意味着接口将在集合更新时更新。
但是您仍然需要在TabPage1View上重新加载模型(添加项目并从AddItemView返回后)。
您有两个选择:
首先,最好是实施一个MessagingCenter。在关闭AddItemView之前触发消息,在TabPage1View中拦截消息,更新Observable,屏幕也会随之更新。
第二,在TabPage1View.PageAppearing上执行相同的操作。
最后一个提示:有时您需要一个一个地删除集合中的项目,然后添加新项目以触发UI刷新。
如果将旧的Observabel换成新的Observabel,则UI可能不会刷新。