私は最近、プリズムを使用してXamarin Formsアプリケーションを構築し始めました。プリズムを使用したMasterDetailナビゲーション
私はMasterDetailナビゲーションでナビゲートできません。移動するために使用するボタンは、バインディングを正しく作成していないようです。ボタンをクリックすると、ブレークポイントで実行されたコマンドに到達することはできませんでした。 コマンドバインディングを除くすべてが正しくバインドされているようですので、何が起こっているのかは分かりません。
私は既にプリズムチーム(HamburgerMenuプロジェクト)が提供しているGitHubサンプルをチェックアウトしました。私はサンプルと全く同じ設定を使用することを納得していますが、私のプロジェクトでそれを動作させる方法はありません。
ベローは、現在使用されているコードです:
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);
}
}
誰かがすでにこの問題が発生したか、私はGREATFULだろう任意のアイデアを持っていた場合。
私はあまりにもPrismに精通していませんが、MasterDetailPageを使用してBIndingContextを作成する方法はありますか。 MasterDetailPageでは、マスターセクションとディテールセクションの両方でBIndingContextを適切なViewModelに設定する必要があります。 –
@AdamPedleyこのビューは、ビューモデルへのデータバインディングを可能にする命名規則に従ってビューモデルに自動的に配線されます。それは動作し、 'UserName'プロパティのバインディングは意図的に機能していますが、コマンドバインディングだけがトリガされず、理由もわかりません。 – BrassMonkey