繁体   English   中英

Xamarin 标签页 MVVM 在页面之间传递数据

[英]Xamarin Tabbed Pages MVVM Passing Data Between Pages

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

我怎样才能做到这一点?

首先,将 List 更改为 ObservableCollection。

ObservableCollection 自己实现了 OnPropertyChanged,这意味着当集合更新时接口也会更新。

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

您有两个选择:

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

其次,在 TabPage1View.PageAppearing 上做同样的事情。

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

如果您用新的观察者替换旧的观察者,UI 可能不会刷新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM