How to pass a parameter from one Page to another P

2019-03-21 04:07发布

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

3条回答
时光不老,我们不散
2楼-- · 2019-03-21 04:33

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());

查看更多
啃猪蹄的小仙女
3楼-- · 2019-03-21 04:34

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/

查看更多
Animai°情兽
4楼-- · 2019-03-21 04:51

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
查看更多
登录 后发表回答