2015-02-15 2 views
1

Я хочу перейти на другую страницу в своем приложении Windows Phone 8.1. Я могу легко сделать это, если есть кнопка, щелкнув по ней и используя Frame.Navigate(typeof(MainPage)); в event handler. Но в моем случае я хочу перейдите на вторую страницу автоматически в зависимости от целочисленного значения. Если оно становится равным нулю, страница автоматически переходит на вторую страницу. В моем случае у меня нет button и поэтому event handler, поэтому для этого. Как я могу это сделать?Навигация в C# и XAML

ответ

2

Внесите интерфейс 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> 
Смежные вопросы