我最近开始使用Prism构建一个Xamarin Forms应用程序。使用棱镜的MasterDetail导航
我无法使用MasterDetail导航进行导航。我用来导航的按钮似乎不能正确地进行绑定。点击按钮时,我从来没有能够用断点达到执行的命令。 除了命令绑定之外的所有东西似乎都正确地进行了绑定,所以我真的不知道发生了什么。
我已经检出了Prism团队提供的GitHub示例(HamburgerMenu项目)。我说服使用与示例完全相同的配置,但没有办法使其适用于我的项目。
波纹管是目前使用的代码:
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);
}
}
如果有人已经遇到了这个问题或有任何想法,我将不胜感激。
不是我对Prism太熟悉了,但是如何使用MasterDetailPage创建BIndingContext。在MasterDetailPage中,主节和细节节都应将其BIndingContext设置为适当的ViewModel。 –
@AdamPedley该视图通过命名约定自动连接到视图模型,允许将数据绑定到视图模型。它的工作原理是,'UserName'属性上的绑定按照默认方式工作,只有命令绑定不会被触发,我不知道为什么。 – BrassMonkey