Xamarin选项卡式页面MVVM在页面之间传递数据

时间:2020-09-08 16:11:41

标签: c# xamarin mvvm viewmodel

我有一个名为“ 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时,我想更新要在该页面上显示的项目列表。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

首先,将List更改为ObservableCollection。

ObservableCollection本身实现了OnPropertyChanged,这意味着接口将在集合更新时更新。

但是您仍然需要在TabPage1View上重新加载模型(添加项目并从AddItemView返回后)。

您有两个选择:

首先,最好是实施一个MessagingCenter。在关闭AddItemView之前触发消息,在TabPage1View中拦截消息,更新Observable,屏幕也会随之更新。

第二,在TabPage1View.PageAppearing上执行相同的操作。

最后一个提示:有时您需要一个一个地删除集合中的项目,然后添加新项目以触发UI刷新。

如果将旧的Observabel换成新的Observabel,则UI可能不会刷新。