[英]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.