繁体   English   中英

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

[英]How to subscribe to an event in a windows 8 settings panel (c#)

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

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

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

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库中的SettingsFlyout来显示自定义选项控件:

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打开时,用户在OptionsView中更改cmbEarliestYear的值时,我需要触发一个事件。 我不知道如何触发/订阅所需的事件。

任何帮助,将不胜感激。

这是我实现的类似行为的简单示例。 Cineworld应用程序可用于查看英国和爱尔兰的电影院/电影的详细信息。

“设置”窗格中的“选项”页面允许选择/修改区域。 这意味着我的应用程序在运行时需要适应区域修改。

我倾向于这样做的是:

1)有一个配置类,用于定义属性并保留这些值。 2)config类公开一个属性

public static event Action RegionChanged = delegate { };

3)在Region属性的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());
}

就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM