我如何绑定到BindableLayout内的MasterPage视图模型

时间:2019-11-29 20:10:40

标签: xamarin mvvm xamarin.forms

我试图将Command属性绑定到我的MasterDetailPage视图模型中的Command。我尝试为母版页定义name属性并将其设置为引用源,但是它似乎未绑定到viewmodel。对于上下文,List MenuItems是同一Viewmodel中的一个属性,并且Title绑定就很好。我相信我没有为命令正确设置Source,但是不确定如何修复它。另外,我正在使用Prism,因此viewmodel已经映射到app.xaml中。

<MasterDetailPage
x:Class="MasterDetailPrism.Views.MainPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
prism:ViewModelLocator.AutowireViewModel="True"
x:Name="menuMasterPage">

<MasterDetailPage.Master>

    <ContentPage Title="Menu">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="225" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>


            <StackLayout Grid.Row="0" BackgroundColor="Aqua" />

            <StackLayout Grid.Row="1" BindableLayout.ItemsSource="{Binding MenuItems}">
                <BindableLayout.ItemTemplate>
                    <DataTemplate>
                        <StackLayout>
                            <Button
                                Command="{Binding NavigateAsync, Source={x:Reference menuMasterPage}}"
                                CommandParameter="{Binding NavPath}"
                                Text="{Binding Title}" />
                        </StackLayout>
                    </DataTemplate>
                </BindableLayout.ItemTemplate>
            </StackLayout>
        </Grid>

    </ContentPage>
</MasterDetailPage.Master>

1 个答案:

答案 0 :(得分:0)

我能够弄清楚-我必须命名StackLayout,然后绑定到其根目录作为源,而不是内容页或母版页。在下面的代码中,ItemsList。

        <StackLayout Grid.Row="1" BindableLayout.ItemsSource="{Binding MenuItems}" x:Name="ItemsList">
            <BindableLayout.ItemTemplate>
                <DataTemplate>
                    <StackLayout>
                        <Button
                            Command="{Binding BindingContext.NavigateAsync, Source={x:Reference ItemsList}}"
                            CommandParameter="{Binding NavPath}"
                            Text="{Binding Title}" />
                    </StackLayout>
                </DataTemplate>
            </BindableLayout.ItemTemplate>
        </StackLayout>