xamarin.formsbindingbinding-context

Xamarin forms - Pass argument to the bindingcontext viewmodel specified in a xaml file


I have a xaml file with with an entry. I am binding the specific entry to a specific viewmodel. But the viewmodel expects a Navigator. How can I pass the navigator from the xaml file to the viewmodel?

     <Entry  Text="{Binding Signature, Mode=TwoWay}">
        <Entry.BindingContext>
            <vm:SignaturePopupViewModel>
                // I need to pass a navigator..

            </vm:SignaturePopupViewModel>
        </Entry.BindingContext>
    </Entry>

The viewmodel expects a navigation object. I use it to pop the page to go back to the previous page after running some code logic.

    public SignaturePopupViewModel(INavigation navigation = null)
    {
        Navigation = navigation;

        SendSignatureCommand = new Command(async () =>
        {
            await SendSignature();
            await Navigation.PopAsync();
        });
    }

Solution

  • You do not need to use INavigation navigation in your SignaturePopupViewModel in your constructor to achieve the Navigation.

    Just use a simple way is

    await Application.Current.MainPage.Navigation.PopModalAsync(); Or

    await Application.Current.MainPage.Navigation.PopAsync()

    like following code.

       public class SignaturePopupViewModel
    {
    
        public ICommand SendSignatureCommand { protected set; get; }
        public SignaturePopupViewModel( )
        {
    
    
            SendSignatureCommand = new Command(async () =>
            {
    
    
                await SendSignature();
                // if you use the     MainPage = new NavigationPage( new MainPage()); in 
                //App.xaml.cs use following code.
                await Application.Current.MainPage.Navigation.PopAsync();
    
                 // if not, just use await Application.Current.MainPage.Navigation.PopModalAsync();
            });
        }
    }