导航到另一页的命令

时间:2020-05-11 08:15:49

标签: xamarin.forms

执行一些操作后,我需要重定向到ViewModel中的另一个页面。我有按钮并设置了命令,但是如果我第一次加载页面,则会收到错误消息“请使用导航页面”,应用程序将失败,我将再次启动并尝试加载页面,并且它可以正常工作,但是如果删除来自模拟器的应用程序,然后再试一次,我有相同的过程。

public ICommand FilterItemsCommand { get; private set; }
public FilterArticlesForPurchaseViewModel()
    : base()
{    
    Task.Run(async () => await LoadAllDataForArticlesAndCategories()).Wait();

    FilterItemsCommand = new Command(async () => await FilterItems());
}
private async Task FilterItems() 
{ 
    await Application.Current.MainPage.Navigation.PushAsync(new ArticlesForPurchaseFiltered());
}

应用

MainPage = new NavigationPage(GetMainPage());

我也尝试过

Application.Current.MainPage = new NavigationPage(new ArticlesForPurchaseFiltered());

但是随后我无法返回上一页,如果我使用android后退按钮,则应用程序将失败 顺便说一句,我正在使用主要细节

1 个答案:

答案 0 :(得分:1)

您可以像下面的代码一样将INavigation navigation添加到ViewModel的构造函数中。

public ItemsViewModel(INavigation navigation)
{
    Title = "Browse";
    Items = new ObservableCollection<Item>();
    LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
    FilterItemsCommand = new Command(() => { navigation.PushModalAsync(new Page1()); });
    MessagingCenter.Subscribe<NewItemPage, Item>(this, "AddItem", async (obj, item) =>
    {
        var newItem = item as Item;
        Items.Add(newItem);
        await DataStore.AddItemAsync(newItem);
    });
}

绑定视图模型时,可以像下面的代码一样添加属性。

public ItemsPage()
{
    InitializeComponent();

    BindingContext = viewModel = new ItemsViewModel(Navigation);
}

如果要在viewModel中实现导航,可以使用

// this way you need add `MainPage =new NavigationPage( new MainPage());` in app.xaml.cs
 navigation.PushAsync(new Page1());
// this way you do not need `MainPage =new NavigationPage( new MainPage());` in //app.xaml.cs, just used it directly
 navigation.PushModalAsync(new Page1());