如何在windows 8设置面板(c#)中订阅事件

如何在windows 8设置面板(c#)中订阅事件,c#,windows-8,C#,Windows 8,我正在用c#/xaml开发一个windows8商店应用程序。windows应用商店指南指出,当用户更改设置时,应用程序应立即反映该更改。我需要帮助弄清楚如何做到这一点 以下是有关我的设置的一些详细信息 我创建了一个名为OptionView的自定义控件: public partial class OptionsView : UserControl { public OptionsView() { this.InitializeComponent(); }

我正在用c#/xaml开发一个windows8商店应用程序。windows应用商店指南指出,当用户更改设置时,应用程序应立即反映该更改。我需要帮助弄清楚如何做到这一点

以下是有关我的设置的一些详细信息

我创建了一个名为OptionView的自定义控件:

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页面。对于第二个页面,您应该检查/验证页面加载的行为,并且不需要重新加载?如果您不介意,您可以看看我发布的问题。我已经解释了这个场景。