0

我正在用 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 的值时,我需要触发一个事件。我不知道如何触发/订阅所需的事件。

任何帮助,将不胜感激。

4

1 回答 1

0

这是我实现的类似行为的简单示例。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());
}

就是这样。

于 2013-01-23T21:42:05.540 回答