根据 MSDN 指南,我们需要将所有应用程序的设置放入 SettingsPane,然后应用程序应在应用设置时更新所有页面。
在我的应用程序中,我需要一个重置选项,将应用程序恢复为默认设置。按下重置按钮时,我需要更新 2 个页面,Calendar.xaml 和 HistoryStatistics.xaml。应用程序的所有数据都放在一个名为 CycleManager 的单例类中。我使用了 Callisto Toolkit 中的 SettingsFlyout 控件。
应用程序.Xaml
在 App.xaml 中注册设置
SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
并在OnCommandsRequested
函数中创建了重置处理程序
var reset = new SettingsCommand("reset", "Reset", (handler) =>
{
var settings = new SettingsFlyout();
settings.Content = new ResetUserControl();
settings.HeaderBrush = new SolidColorBrush(_background);
settings.Background = new SolidColorBrush(_background);
settings.HeaderText = "Reset";
settings.IsOpen = true;
});
args.Request.ApplicationCommands.Add(reset);
循环管理器.cs
在 CycleManager 类中,有一个 m_Reset 变量、它的 setter 和 getter 以及一个名为 ResetClicked 的事件处理程序
public event EventHandler ResetClicked;
public bool Reset
{
get
{
return m_reset;
}
set
{
m_reset = value;
if (ResetClicked != null)
ResetClicked(this, EventArgs.Empty);
}
}
接下来是我在第一类 calendar.xaml 中关联此处理程序的部分
日历.xaml
在类的构造函数中,我声明了事件处理程序
CycleManager pCycMan = CycleManager.Instance;
pCycMan.ResetClicked += this.ResetClicked;
其次是事件处理程序的定义
private async void ResetClicked(object sender, EventArgs e)
{
CycleManager pCycMan = CycleManager.Instance;
if (pCycMan.Reset == true)
{
try
{
await Windows.Storage.ApplicationData.Current.ClearAsync(Windows.Storage.ApplicationDataLocality.Local);
pCycMan.InitializeValues();
}
catch (Exception)
{
}
}
CreateCalendar();// UI is loaded
}
在 HistoryStatistics.xaml 的构造函数中,我做了与上面相同的事情
历史统计.xaml
public HistoryStatistics()
{
CycleManager pCycMan = CycleManager.Instance;
pCycMan.ResetClicked += this.ResetClicked;
}
并定义
private void ResetClicked(object sender, EventArgs e)
{
CycleManager pCycMan = CycleManager.Instance;
if (pCycMan.Reset == true)
{
await Windows.Storage.ApplicationData.Current.ClearAsync(Windows.Storage.ApplicationDataLocality.Local);
pCycMan.InitializeValues();
LoadListView();// loads the UI
DisplayStatistics();//loads the UI for the page
}
}
现在的问题
这是正确的方法吗?
当在第二页的第一页(HistoryStatistcs)中按下重置时,首先调用在第一页(Calendar.xaml.cs)中声明的重置单击函数,然后调用 HistoryStatistics 中的函数。两者都被异步执行!:(这是正确的行为吗?
这个问题很长。希望大家理解场景和问题。