hereから次のコードをコピーしました。私はxamlスライダに二重の値をバインドし、SettingsPageにナビゲートするたびにlocalsettingからこの値を取得し、スライダ値がlocalsettingsに保存されるようにユーザによって変更されるたびに取得します。ここに私のコードは、これまでのところです:UWP - 設定の保存が常に機能しない
SettingsPage.xaml.cpp:
Windows::Storage::ApplicationDataContainer^ localSettings = Windows::Storage::ApplicationData::Current->LocalSettings;
SettingsPage::SettingsPage()
{
InitializeComponent();
this->viewModel = ref new SettingsViewModel();
this->DataContext = this->viewModel;
}
void SettingsPage::QSlider_ValueChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e)
{
Windows::Storage::ApplicationDataCompositeValue^ composite =ref new Windows::Storage::ApplicationDataCompositeValue();
bool a = composite->Insert(SETTINGS_TAG_SLIDER_Q, dynamic_cast<PropertyValue^>(PropertyValue::CreateDouble((double)sldQ->Value)));
auto values = localSettings->Values;
bool b = values->Insert(SETTINGS_TAG_SETTINGS_PAGE, composite);
}
SettingsPage.xaml:
<Slider x:Name="sldQ" Margin="15,5,15,0" Value="{Binding SliderQValue}" ValueChanged="Slider_ValueChanged" MaxWidth="300" HorizontalContentAlignment="Left" ></Slider>
がSettingsViewModel.cpp:
double SettingsViewModel::SliderQValue::get()
{
Windows::Storage::ApplicationDataContainer^ localSettings = Windows::Storage::ApplicationData::Current->LocalSettings;
ApplicationDataCompositeValue^ composite = safe_cast<ApplicationDataCompositeValue^>(localSettings->Values->Lookup(SETTINGS_TAG_SETTINGS_PAGE));
if (composite != nullptr)
{
if (composite->HasKey(SETTINGS_TAG_SLIDER_Q)) {
double value = safe_cast<IPropertyValue^>(composite->Lookup(SETTINGS_TAG_SLIDER_Q))->GetDouble();
return value;
}
}
return 99;
}
私の問題があることですこれは一度だけ機能します!他のページからSettingsPageに移動すると、slidervalue = 99と表示されます。次に、私はそれをドラッグして設定します。 50.次に、他のページに戻ります。他のページから、もう一度SettingsPageに移動し、slidervalue = 50を取得します。しかし、もう一度やり直すと、もう一度99になる。したがって、1ページのナビゲーションサイクルでのみ動作しますが、アプリが再起動しても動作するはずです。私のコードの問題は何ですか?何か間違ったことを理解していますか