MVVM中的Windows Phone页面导航

时间:2014-05-02 14:57:26

标签: windows silverlight windows-phone-7 windows-phone-8 mvvm

我在其中一个应用程序中使用MVVM。我为模型,视图和视图模型创建了不同的项目。 我需要从ViewModel导航到另一个XAML。我找到了一些使用MVVM灯的解决方案。有没有办法在不使用MVVM灯的情况下从视图模型实现导航。

2 个答案:

答案 0 :(得分:0)

简单,

如果您想从第1页导航到第2页,

private void MoveToPage2FromPage1()
{
    NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));
}

How to perform page navigation on Windows Phone 8

答案 1 :(得分:0)

您可以将当前页面网址存储在应用中的共享ViewModel的通知属性中。之后,很容易捕获此URL的更改并通过观察导航到正确的URL。

public class AppViewModel : INotifyPropertyChanged
{
    public string CurrentPageURL { get; set; }

    private string _currentPageURL;
    public string CurrentPageURL
    {
        get { return _currentPageURL;}
        set
        {
        if (_currentPageURL==value)
        return; // to prevent reload the same page.
            _currentPageURL = value;
            NotifyPropertyChangedCurrentPageURL
        }
    }

    // INotifyPropertyChanged implementations
    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

// Store in static singleton instance of AppViewModel
public class App : Application
{
    private static Lazy<AppViewModel> _ViewModel=new Lazy<ViewModel>();
    public static AppViewModel ViewModel { get { return _ViewModel.Value; } }
    ....

    public App()
    {
        AppViewModel.PropertyChanged=(s,a) => 
        {
            if (a.PropertyName=="CurrentPageURL")
            {
                NavigationService.Navigate(new Uri(AppViewModel.CurrentPageURL, UriKind.Relative));

            };
        }   
    }
}


// Usage sample
public class Page1ViewModel 
{
    private btnMoveNextPage_Click(object s, EventHandler a) {
        App.ViewModel.CurrentURL="~/Page2.xaml";
    }
}