DetailPage.xaml に移動して詳細情報を表示することはできますが、オブジェクトを DetailVieModel に渡すことができず、押し戻すとアプリが閉じます。
これが私のコードです:
ViewModelLocator で
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
var navigationService = this.CreateNavigationService();
SimpleIoc.Default.Register<INavigationService>(() => navigationService);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<DataService>();
SimpleIoc.Default.Register<DetailViewModel>(true);
}
ナビゲーションは、現時点では 1 つしかありません。これは、DetailPage.xaml に移動できるため、機能しているようです。
private INavigationService CreateNavigationService()
{
var navigationService = new NavigationService();
navigationService.Configure("DetailPage", typeof(DetailPage));
return navigationService;
}
これは私が MainViewModel で行うことです:
public RelayCommand ShowDetailPage
{
get
{
return new RelayCommand(() =>
{
_INavigationService.NavigateTo("DetailPage");
});
}
}
これは、DetailViewModel に渡したいオブジェクトです
private Info _SelectedObject;
public Info SelectedObject
{
get
{
return _SelectedObject;
}
set
{
_SelectedObject = value;
if (value != null)
{
Messenger.Default.Send<Info>(value);
_SelectedObject = null;
}
RaisePropertyChanged("SelectedObject");
}
}
これは、MainPage.xaml でコマンドをトリガーするために行うことです。
<ListView Grid.Row="1"
ItemsSource="{Binding ObjectsList}">
<i:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<core:InvokeCommandAction Command="{Binding ShowDetailPage}"
CommandParameter="{Binding SelectedObject}" />
</core:EventTriggerBehavior>
</i:Interaction.Behaviors>
最後に、DetailViewModel で SelectedObject に Messenger.Register... を要求します。
Messenger.Default.Register<Info>(this, (selectedinfo) =>
{
_SelectedInfo = selectedinfo;
});