C# 和 XAML 中的导航

Posted

技术标签:

【中文标题】C# 和 XAML 中的导航【英文标题】:Navigation in C# and XAML 【发布时间】:2015-04-15 21:16:35 【问题描述】:

我想导航到我的 Windows Phone 8.1 应用程序中的另一个页面。如果有一个按钮,我可以通过单击它并在 event handler 中使用 Frame.Navigate(typeof(MainPage)); 轻松做到这一点。但就我而言,我想导航根据整数值自动转到第二页。如果它变为零,则页面自动转到第二页。在我的情况下,我没有buttonevent handler 所以这样做。我该怎么做?

【问题讨论】:

【参考方案1】:

为您的视图模型实现 INotifyPropertyChanged 接口。这是一个粗略的实现,理想情况下,您将使用 mvvm 框架并根据需要向您的视图发送消息。

查看模型

public class GameStateViewModel : INotifyPropertyChanged

    private int currentScore = 10;

    /// <summary>
    /// The timer here added to simulate whatever is supposed to be changing your value. 
    /// </summary>
    public GameStateViewModel()
    
        var timer = new DispatcherTimer
        
            Interval = TimeSpan.FromSeconds(2)
        ;

        timer.Tick += (sender, args) =>
        
            if (this.CurrentScore > 0)
            
                this.CurrentScore--;
            
            else
            
                timer.Stop();
            
        ;

        timer.Start();
    

    public event PropertyChangedEventHandler PropertyChanged;

    public int CurrentScore
    
        get  return currentScore; 
        set
        
            currentScore = value;
            NotifyPropertyChanged("CurrentScore");
        
    

    public void NotifyPropertyChanged(string propertyName)
    
        if (PropertyChanged != null)
        
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        
    

后面的代码

 public partial class MainPage : PhoneApplicationPage

    // Constructor
    public MainPage()
    
        InitializeComponent();

        var viewModel = new GameStateViewModel();

        viewModel.PropertyChanged += (sender, args) =>
        
            if (viewModel.CurrentScore <= 0)
            
                this.NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));
            
        ;

        this.DataContext = viewModel;

    

Xaml

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <TextBlock Text="Binding CurrentScore" FontSize="StaticResource PhoneFontSizeExtraLarge" />
    </Grid>

【讨论】:

以上是关于C# 和 XAML 中的导航的主要内容,如果未能解决你的问题,请参考以下文章

微软UWP应用,导航栏设计。

页面之间导航 C# UWP

在简历处理程序中的 App.xaml.cs 中进行导航

UWP 或 XAML 导航视图突出显示 [关闭]

在没有 XAML 的情况下创建 Windows 应用商店应用页面

Windows Store App XAML - 如何获取导航页面的文本框值