簡體   English   中英

MVVM Light:關於提取RelayCommand導航參數

[英]MVVM Light: About extracting the RelayCommand navigation parameter

我是 MVVM 的新手,所以如果這個問題有一個簡單的答案,我深表歉意,但我無法通過搜索谷歌來解決這個問題。

所以,基本上,我使用 MVVM Light 來制作 Windows 10 通用應用程序。 使用 ViewModelLocator 方法導航,效果很好。 我的問題是關於附帶的參數。 我有以下導航方法:

public RelayCommand<SelectionChangedEventArgs> SelectedItemCommand
    {
        get
        {
            return _selectedItemCommand
            ?? (_selectedItemCommand = new RelayCommand<SelectionChangedEventArgs>(
                 p => _navigationService.NavigateTo(ViewModelLocator.SecondPageKey, p)));

        }
    }

我轉到第二頁。 但是如何在目標頁面上提取這個p呢? 到目前為止我已經想到了

  1. 此參數進入目標頁面視圖的OnNavigatedTo方法,然后我可以將其傳遞給 ViewModel。 但這似乎與 MVVM 的內容不符。 我的第二頁中甚至沒有OnNavigatedTo並且它加載得很好。

  2. 另一種方法是使用MVVMLight的Messenger方法在第二頁的VM中獲取,看起來更簡潔。 但如果這是唯一正確的方法,那么在 RelayCommand 中傳遞參數有什么意義呢?

我是否錯過了某種第三種技術? 我很想在這方面學習一些東西。 感謝期待。

您可以構建和使用自己的 NavigationService。 或改進當前的:

創建 BindablePage,它繼承自 Page。 里面:

public class BindablePage : Page
{
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        var navigableViewModel = this.DataContext as INavigable;
        if (navigableViewModel != null)
            navigableViewModel.OnNavigatedTo(e);
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);

        var navigableViewModel = this.DataContext as INavigable;
        if (navigableViewModel != null)
            navigableViewModel.OnNavigatedFrom(e);
    }

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        base.OnNavigatingFrom(e);

        var navigableViewModel = this.DataContext as INavigable;
        if (navigableViewModel != null)
            navigableViewModel.OnNavigatingFrom(e);
    }

}

創建 INavigable:

public interface INavigable
{
    void OnNavigatedTo(NavigationEventArgs e);
    void OnNavigatedFrom(NavigationEventArgs e);
    void OnNavigatingFrom(NavigatingCancelEventArgs e);
    bool AllowGoBack();
}

在您的 Viewmodel 中實現 INavigable,您將在您的 viewmodel 中處理 OnNavigatedTo,它可以訪問您發送的 p 參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM