私はスーパー経験豊富なプログラマーではないので、私は愚かな質問をしているかもしれませんが、私はto-doアプリを作っていました。私のアプリは本当にシンプルなitemsControlを使用して、アイテムを作成するためのユーザー入力を収集します。私が立ち往生したところでは、ユーザーがアプリを終了したときにそのデータを保存してシリアル化しようとしています。私はページ間でデータをキャッシュすることができますが、ユーザーがアプリケーションを閉じて再オープンすると、データは消えてしまいます。コンポジット値を使ってlocalSettingsにデータを保存しようとしていましたが、事前に決められた変数を使用してコンポジットを設定しました。後で保存された情報でitemsControlを再作成するとその情報を読み取る必要がありました。ここに私のコードです。私はここのItemsControlと複合値の変数を定義します。UWP:変数からコンポジット値を取得するにはどうすればよいですか?
List<ToDoItem> items = new List<ToDoItem>();
private void CreateItem_Click(object sender, RoutedEventArgs e)
{
ToDoItemTemplate.Items.Add(new ToDoItem() { ItemTitle = NameBox.Text, Month = itemdate.Date.Month, Date = itemdate.Date.Day, Year = itemdate.Date.Year });
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
// Create a composite setting
Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["intValM"] = itemdate.Date.Month;
composite["intValD"] = itemdate.Date.Day;
composite["intValY"] = itemdate.Date.Year;
composite["strVal"] = NameBox.Text;
localSettings.Values["CompositeSetting"] = composite;
addItemPopup.IsOpen = false;
addItem.Background.SetValue(SolidColorBrush.ColorProperty, Windows.UI.Colors.Transparent);
NameBox.Text = "";
CreateItem.IsEnabled = false;
}
そして私はここから情報を読み取るためにをしようとしていました。私はたくさんのものを試して、公式のMicrosoft Developer's siteを含む、すでに多くのフォーラムを閲覧してきました。変数からコンポジットの値を取得する方法を
private new void Loaded(object sender, RoutedEventArgs e)
{
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.ApplicationDataCompositeValue composite =
(Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["CompositeSetting"];
if (composite == null)
{
// No data
}
else
{
ToDoItemTemplate.Items.Add(
new ToDoItem()
{
ItemTitle = "strVal",
Month = localSettings.Values["intValM"],
Date = localSettings.Values["intValD"],
Year = localSettings.Values["intValY"]
}
);
}
}
おかげで、私が実行しようとしましたあなたの提案でビルドしますが、intellisenseは "暗黙のうちにオブジェクトを文字列に変換できません"と言っています。 'strVal'は文字列であると思われますが、どういうわけかオブジェクトとして表示されますか?以前はNamebox.Textに設定しました。最初にNamebox.Textを変数に設定し、そこからstrValに変数を設定する必要がありますか? –
あなたの提案を使用しましたが、そこからToStringメソッドを使用して自分で修正しました。本当にありがとう! @Gabor –