我有一个名为"TabContainerPage"的TabbedPage,它是两个ContentPage的容器。
<TabbedPage.Children>
<me:TabbedPage1View Title="Tabbed Page 1" BindingContext="{Binding tabbedPage1ViewModel}" WidthRequest="400"/>
<me:TabbedPage2View Title="Tabbed Page 2"/>
</TabbedPage.Children>
在TabContierPageViewModel中,我有一个TabbedPage1ViewModel的属性,名为"tabbedPage1View Model">
public TabbedPage1ViewModel tabbedPage1ViewModel { get; set; }
public TabContainerPageViewModel()
{
tabbedPage1ViewModel = new TabbedPage1ViewModel ();
}
在选项卡Page1ViewModel中,我有一个项目列表
private List<Items> _items;
public List<Items> items
{
get
{
return _items;
}
set
{
_items = value;
OnPropertyChanged();
}
}
从TabPage1View,我导航到另一个名为"AddItemView"的页面
顾名思义,我在AddItemView页面上添加了一个具有简单名称和描述的新项。
当我单击后退按钮返回TabPage1View时,我想更新要在该页面上显示的项目列表。
我怎样才能做到这一点?
首先,将List更改为ObservableCollection。
ObservableCollection自己实现了OnPropertyChanged,这意味着接口将在集合更新时更新。
但您仍然需要在TabPage1View上重新加载您的模型(在添加项目并从AddItemView返回后(。
你有两个选择:
首先也是最好的一点是,实施MessagingCenter。在关闭AddItemView之前激发一条消息,在TabPage1View中截取消息,更新Observable,屏幕也会更新。
其次,在选项卡Page1View.PageAppearing.中执行相同操作
最后一个提示:有时您需要逐个删除集合中的项,然后添加新项来触发UI刷新。
如果用新的Observiel替换旧的Observel,UI可能不会刷新。