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 に答える