我第一次修改Windows Phone应用程序,我遇到了麻烦。
我的程序有两个页面 - 主页面有一个锻炼列表(现在预先填充)和三个按钮。按下“添加”按钮后,您将导航到第二页,其中包含一个文本框和另一个“添加”按钮。我试图让添加按钮更新锻炼列表(似乎工作)并导航回MainPage。
我已经尝试了两种方法来实现这一点 - 我添加了“this.Frame.Navigate(typeof(MainPage));”到添加按钮。我还添加了一个“后退按钮”处理程序,返回到最后一页。
启用导航代码时按“已添加”按钮每次都会导致异常。如果您在点击添加按钮之前导航到页面并点击后退按钮,页面将返回而不会出现问题。但是,如果您点击“添加”然后尝试返回,则会再次导致异常。
这是主页的代码。
namespace GuidedWorkout
{
public sealed partial class MainPage : Page
{
public static List<string> allWorkouts = new List<string>();
public string textInfo { get; set; }
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
Workouts Workout = new Workouts("Chest Day");
Workouts Workout3 = new Workouts("Leg Day");
Workouts workout2 = new Workouts("Arms Day");
allWorkoutsList.ItemsSource = allWorkouts;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached.
/// This parameter is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//this.allWorkoutsList.ItemContainerGenerator.ContainerFromItem();
//textInfo = (sender as ListBox).SelectedItem.ToString();
//textInfo = lbi.Content.ToString();
//this.titleBlock.Text = textInfo;
}
private void addWorkoutButton_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(GuidedWorkout.AddWorkout));
}
}
这是第二页的代码。
namespace GuidedWorkout
{
public sealed partial class AddWorkout : Page
{
public AddWorkout()
{
this.InitializeComponent();
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if(rootFrame != null && rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
}
private void addWorkoutButton_Tapped(object sender, TappedRoutedEventArgs e)
{
string wName;
wName = workoutTextBox.Text.ToString();
Workouts addedWorkout = new Workouts(wName);
MainPage.allWorkouts.Add(addedWorkout.workoutName);
//this.Frame.Navigate(typeof(GuidedWorkout.MainPage));
}
}
}
感谢您的帮助。
答案 0 :(得分:0)
使用超链接按钮,而不是按钮。
XAML:
d := "/some/dir/%s"
fmt.Sprintf(d, "hello") // Returns "/some/dir/hello"
CS:
<HyperlinkButton Content="My Label"
Click="HyperlinkButton_Click" />
根据需要将其与MainPage的OnNavigatedTo方法结合使用。
此外,如果您想要在返回页面时更新页面:
// Navigate to MainPage.
private void HyperlinkButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
// TO DO
this.Frame.Navigate(typeof(MainPage));
}
答案 1 :(得分:0)
为什么不使用
Frame.GoBack();
顺便说一下,我希望您确实意识到,当您在第二页上添加AddWorkOut并将其添加到MainPage中的List时,它只是将其保存在该会话的内存中。应用程序关闭时,您将丢失添加的数据。
我建议您从更持久的形式保存/读取数据,如
这很简单:
private IsolatedStorageSettings userSettings = IsolatedStorageSettings.ApplicationSettings;
// to add
userSettings.Add("testdata");
userSettings.Save();
//to read
string xx = userSettings[“SomeValue”].ToString();
如果您想扩展,请考虑其他方式,例如数据库。