1
votes

Simply put, I got a page with its viewmodel in xamarin form and I cannot make it work.

Here's the relevant parts in the viewmodel:

public EntranceMenuViewModel(INavigation navigation)
    {
        Navigation = navigation;
        Title = "Entrées";

        btnInventoryCommand = new Command(async () => await btnInventoryCommandExe());
        btnMoveGoodsCommand = new Command(async () => await btnMoveGoodsCommandExe());

    }



    ICommand btnInventoryCommand { get; set; }
    ICommand btnMoveGoodsCommand { get; set; }
    async Task btnInventoryCommandExe()
    {
        await Navigation.PushAsync(new Inv2Page());
    }
    async Task btnMoveGoodsCommandExe()
    {
        await Navigation.PushAsync(new Inv2Page(true));
    }

the relevant CS in the page:

    EntranceMenuViewModel viewModel;
    

    public EntranceMenuPage()
    {
        InitializeComponent();

        BindingContext = viewModel = new EntranceMenuViewModel(Navigation);

    }

and finally the relevant Xaml.

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="60"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Button Grid.Column="0" Text="{Binding test}" Command="{Binding btnInventoryCommand}"></Button>
        <Button Grid.Column="1" Text="Move Goods" Command="{Binding btnMoveGoodsCommand}"></Button>
    </Grid>

It does bind, since the text binding is working. I double checked the names, and I didn't see any issue with that. I feel like I'm missing something fundamental, but after going through my tutorial videos twice I can't understand. I tried putting breaker within the function, it doesn't seem to enter them.

Thank you for the help

1

1 Answers

1
votes

Make the commands public. By default they are private and the xaml can't actually "see" them in order to execute them.

public ICommand btnInventoryCommand { get; set; }
public ICommand btnMoveGoodsCommand { get; set; }