How to pass a parameter from one Page to another P

2019-03-21 04:44发布

问题:

I want to send a value when I press a button in a form to another form through the MVVM pattern.

This is the XAML file

 <Button x:Name="myButton"
            Text="RandomButton"
            TextColor="#000000"
            BackgroundColor="{x:Static local:FrontEndConstants.ButtonBackground}"
            Grid.Row="2" Grid.Column="0"
            Grid.ColumnSpan="3"
            Command="{Binding NewPage}"
            CommandParameter="100">     
</Button>

And this is my ModelView class where I get redirected to another form.

class JumpMVVM :INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private INavigation _navigation;

        public ICommand NewPage
        {
            get
            {
                return new Command(async () =>
                { 
                    await _navigation.PushAsync(new Page2()); // HERE
                });
            }
        }

        public JumpMVVM() { }

        public JumpMVVM(INavigation navigation)
        {                
            _navigation = navigation;                
        }

The jump works. How can I send that "CommandParameter" to "Page2" ?

Thanks, Dragos

回答1:

The easiest approach would be to pass the value as a parameter to the constructor of Page2. Or you could create a public property on Page2 and assign the value to it after you create it.

await _navigation.PushAsync(new Page2(argument_goes_here)); // HERE


回答2:

Use SQLite to store the object and instantiate it in the new ViewModel or use the messaging center built into Xamarin.Forms to pass data between ViewModels indirectly.

Jason's approach will work but personally passing data up to the view, to another view then back down to the view model is not something I want to do.

SQLite Documentation

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/databases/

Messaging Center Documentation

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/



回答3:

Good example of passing parameters to ViewModel and getting result back: How do I pass entry parameters to Xamarin MVVM viewmodel

To navigate from ViewModel to next page (View):

await Xamarin.Forms.Application.Current.MainPage.Navigation.PushAsync(new MyView());