如何在windows 8设置面板(c#)中订阅事件
我正在用c#/xaml开发一个windows8商店应用程序。windows应用商店指南指出,当用户更改设置时,应用程序应立即反映该更改。我需要帮助弄清楚如何做到这一点 以下是有关我的设置的一些详细信息 我创建了一个名为OptionView的自定义控件:如何在windows 8设置面板(c#)中订阅事件,c#,windows-8,C#,Windows 8,我正在用c#/xaml开发一个windows8商店应用程序。windows应用商店指南指出,当用户更改设置时,应用程序应立即反映该更改。我需要帮助弄清楚如何做到这一点 以下是有关我的设置的一些详细信息 我创建了一个名为OptionView的自定义控件: public partial class OptionsView : UserControl { public OptionsView() { this.InitializeComponent(); }
public partial class OptionsView : UserControl
{
public OptionsView()
{
this.InitializeComponent();
}
private void cmbEarliestYear_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
roamingSettings.Containers["appOptions"].Values["earliestYear"] = cmbEarliestYear.SelectedValue.ToString();
}
}
在我的App.xaml.cs类中,当用户单击选项链接时,我使用Callisto库中的SettingsFly来显示自定义选项控件:
protected override void OnWindowCreated(WindowCreatedEventArgs args)
{
base.OnWindowCreated(args);
SettingsPane.GetForCurrentView().CommandsRequested += onCommandsRequested;
}
void onCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs eventArgs)
{
UICommandInvokedHandler optionsHandler = new UICommandInvokedHandler(onOptionsClick);
SettingsCommand optionsCommand = new SettingsCommand("options", "Options", optionsHandler);
eventArgs.Request.ApplicationCommands.Add(optionsCommand);
}
void onOptionsClick(IUICommand command)
{
SettingsFlyout settings = new SettingsFlyout();
settings.FlyoutWidth = SettingsFlyout.SettingsFlyoutWidth.Narrow;
settings.HeaderText = "Options";
settings.Content = new OptionsView();
settings.IsOpen = true;
}
我的应用程序中有一个名为CreateTripPage的页面。该页面上有一个组合框,允许用户更改旅行的年份。该组合框中的最早年份需要根据用户在选项中设置的值进行更改。因此,当用户在CreateTripPage打开时在Options View中更改cmbEarliestYear的值时,我需要触发一个事件。我不知道如何启动/订阅所需的活动
任何帮助都将不胜感激。这里是我实施的类似行为的一个简单示例。Cineworld应用程序可用于查看英国和爱尔兰电影院/电影/的详细信息 设置窗格中的选项页,允许选择/修改区域。这意味着我的应用程序在运行时需要进行区域修改 我倾向于这样做: 1) 拥有一个定义属性并持久化这些值的配置类。 2) config类公开一个属性
public static event Action RegionChanged = delegate { };
3) 在区域属性的setter中触发事件
if (RegionChanged != null)
RegionChanged();
4) 现在位于MainPage.xaml.cs或主应用程序入口点
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
Config.RegionChanged -= Config_RegionChanged;
Config.RegionChanged += Config_RegionChanged;
// do whatever else you need to do (initial data load)
base.OnNavigatedTo(e);
}
async void Config_RegionChanged()
{
bLoaded = false;
this.GoHome(this, new RoutedEventArgs());
}
真的是这样。如果您想更改两页而不是一页,该怎么办?我们应该在这两个类中注册事件吗?在任何时候,您都只能加载一个xaml页面。对于第二个页面,您应该检查/验证页面加载的行为,并且不需要重新加载?如果您不介意,您可以看看我发布的问题。我已经解释了这个场景。