使用棱镜的MasterDetail导航

时间:2017-04-22 16:27:59

标签: xamarin.forms

我最近开始使用Prism构建一个Xamarin Forms应用程序。

我无法使用MasterDetail导航进行导航。我用来导航的按钮似乎没有正确绑定。单击按钮时,我无法通过断点访问已执行的命令。 除了命令绑定之外的所有东西似乎都正确地进行了绑定,所以我真的不知道发生了什么。

我已经检查了Prism团队(HamburgerMenu项目)提供的GitHub样本。我说服使用与样本完全相同的配置,但无法使其适用于我的项目。

Bellow是目前使用的代码:

MainPage.xaml中

<MasterDetailPage 
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="MonkeyVault.Views.MainPage">
    <MasterDetailPage.Master>
        <NavigationPage Title="Required Foo" Icon="ic_menu.png">
            <x:Arguments>
                <ContentPage Title="Menu">
                    <StackLayout Padding="40">
                        <Label Text="{Binding UserName, StringFormat='Hello, {0}'}"/>
                        <Button Text="Sites" Command="{Binding NavigateCommand}" CommandParameter="Navigation/Sites" />
                    </StackLayout>
                </ContentPage>
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Master>
</MasterDetailPage>

MainPageViewModel.cs

public class MainPageViewModel : BaseViewModel
        {
            #region Fields

            private string _userName;

            #endregion

            #region Properties

            public string UserName
            {
                get => _userName;
                set => SetProperty(ref _userName, value);
            }

            public DelegateCommand<string> NavigateCommand;

            public DelegateCommand NCommand;

            #endregion

            public MainPageViewModel(INavigationService navigationService)
                : base(navigationService)
            {
                Title = "Main Page";

                NavigateCommand = new DelegateCommand<string>(OnNavigateCommandExecuted);
            }

            private async void OnNavigateCommandExecuted(string path)
            {
                await _navigationService.NavigateAsync(path);
            }
        }

如果某人已经遇到过这个问题,或者有任何想法我会很高兴。

1 个答案:

答案 0 :(得分:0)

您需要将DelegateCommand创建为Property。

public DelegateCommand<string> NavigateCommand { get; set; }

不可否认我只是在这里猜测,但我之前遇到过与Fields绑定的问题,需要将其更改为属性才能获得绑定。