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 可能不会刷新。
我有一个名为 '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'
的 TabbedPage1ViewModelpublic 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 可能不会刷新。