微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过TabBar Xaml将参数从viewmodel传递到页面的ctor吗?

如何解决通过TabBar Xaml将参数从viewmodel传递到页面的ctor吗?

我正在使用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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。