簡體   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