问题描述
我正在使用Xamarin Form的Shell在页面底部创建三个选项卡。页面的其中之一正在接受一个参数,该参数可能来自Mainviewmodel(以前的设计是该页面的图标位于主屏幕中,我将PushAsync并通过ctor传递该参数,这很简单)。但是,由于我重新设计了应用程序以使用Shell和Tab,所以我不知道如何通过xaml从Mainviewmodel传递页面的ctor参数。
谢谢您的任何帮助。
<!--<ShellItem>
<ShellContent>
<pages:MainView/>
</ShellContent>
</ShellItem>-->
<TabBar>
<Tab Title="Main" Icon="mainscreen.png">
<ShellContent>
<pages:MainView/>
</ShellContent>
</Tab>
<Tab Title="News" Icon="googlenews.png">
<ShellContent>
<pages:NewsView/>
</ShellContent>
</Tab>
<Tab Title="Search" Icon="search.png">
<ShellContent>
<pages:SearchView> // need to pass this page an argument from Mainviewmodel
<x:Arguments>
<vm:Mainviewmodel ListViewItems=""></vm:Mainviewmodel>
</x:Arguments>
</pages:SearchView>
</ShellContent>
</Tab>
</TabBar>
public partial class SearchView : ContentPage
{
public SearchView(ObservableCollection<DailyIRD> dailyIrd)
{
InitializeComponent();
BindingContext = new Searchviewmodel(this,dailyIrd);
}
}
解决方法
我创建一个具有MainViewModel
属性的Title
进行测试。下面的方法很好用。
MainViewModel.cs
public class MainViewModel
{
public string Title { get; set; } = string.Empty;
public MainViewModel()
{
Title = "MainViewModel";
}
}
AppShell.xaml:
<Tab Title="Search" Icon="monkeyicon.png">
<ShellContent>
<local:SearchView>
<local:SearchView.BindingContext>
<vm:MainViewModel />
</local:SearchView.BindingContext>
<!-- // need to pass this page an argument from MainViewModel -->
<!--<x:Arguments>
<vm:MainViewModel Title="{Binding .}" />
</x:Arguments>-->
</local:SearchView>
</ShellContent>
</Tab>
SearchView.xaml:
<ContentPage.Content>
<StackLayout>
<Label
HorizontalOptions="CenterAndExpand"
Text="Welcome to SearchView!"
VerticalOptions="CenterAndExpand" />
<Label Text="{Binding Title}" />
</StackLayout>
</ContentPage.Content>