2017-09-14 13 views
1

私はスーパー経験豊富なプログラマーではないので、私は愚かな質問をしているかもしれませんが、私は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"] 
        } 
       ); 
      } 
     } 

答えて

0

あなたのコードと今、それは何が問題であるかを見ることができます。 :)あなたが新しいToDoItemあなたが書く必要がありますので、あなたは、composite変数に値を持っているなど

localSettings.Values["intValM"]を使用し作成

ToDoItemTemplate.Items.Add(
    new ToDoItem() 
    { 
     ItemTitle = composite["strVal"], 
     Month = composite["intValM"], 
     Date = composite["intValD"], 
     Year = composite["intValY"] 
    } 
); 
+0

おかげで、私が実行しようとしましたあなたの提案でビルドしますが、intellisenseは "暗黙のうちにオブジェクトを文字列に変換できません"と言っています。 'strVal'は文字列であると思われますが、どういうわけかオブジェクトとして表示されますか?以前はNamebox.Textに設定しました。最初にNamebox.Textを変数に設定し、そこからstrValに変数を設定する必要がありますか? –

+0

あなたの提案を使用しましたが、そこからToStringメソッドを使用して自分で修正しました。本当にありがとう! @Gabor –

0

複合データへの保存データのコードロジックが正しいです。 Loadedイベントハンドラでは、このステップは正しかった、localSettingsから複合インスタンスを持っていますが、localSettingsから特定の値は、次のコードのような複合インスタンスから値を取得することができ、間違っていただ:私はフォーマットさ

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
Windows.Storage.ApplicationDataCompositeValue composite =(Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["CompositeSetting"]; 
if (composite == null) 
{ 
} 
else 
{ 
    var ItemTitle = composite["strVal"]; 
    var Month = composite["intValM"]; 
    var Day = composite["intValD"]; 
    var Year = composite["intValY"]; 
} 
関連する問題