0

WP8 でサイドプロジェクトに取り組んでいますが、IsolatedStorage の動作に問題があります。同じ質問をしているように見える何十もの投稿を見てきましたが、解決策を見つけることができませんでした。このアプリケーションは単純なタスク オーガナイザで、独自のタスク オブジェクトを作成しました。1 つはサマリー タスクで、各 SummaryTask には BasicTask のリストが含まれています。ObservableCollection を使用していたため、問題が発生するためだけに XMLSerializing を使用しようとしました。コレクションを INotifyPropertyChanged のサブクラスに変更できると思っていましたが、それもうまくいきませんでした。率直に言って、私はまだ 2 つの違いのコツをつかんでいます。とにかく、私の最新の試みには、IsolatedStorage Settings を使用しようとする試みが含まれており、それも機能しませんでした。これが私のクラス定義です:

class SummaryTask : TaskItem
{
    public List<BasicTask> children = new List<BasicTask>();
    private string sumTaskName;
    private int sumTaskId;
    public SummaryTask()
    {

    }
    public SummaryTask(string name, int id)
    {
        sumTaskName = name;
        sumTaskId = id;
    }
    public string SumTaskName
    {
        get { return sumTaskName; }
        set { sumTaskName = value; }
    }
    public int SumTaskId
    {
        get { return sumTaskId; }
        set { sumTaskId = value; }
    }
    public void addTask(string taskName, string taskText, int taskId){
        children.Add(new BasicTask(taskName, taskText, taskId));
    }
    public List<BasicTask> CHILDREN
    {
        get { return children; }
    }
}
}

グローバル変数でこの SummaryTask のリストを作成し、簡単にアクセスできるようにページ全体で使用します。MainPage.xaml.cs ファイルの先頭が更新されたように見えるのは次のとおりです。

    public MainPage()
    {
        InitializeComponent();
        BackKeyPress += OnBackKeyPressed;
        if (Global.settings.Contains("list"))
        {
            Global.list = (List<SummaryTask>)Global.settings["list"];
        }
        else
        {
            Global.list = new List<SummaryTask>();
        }
    }

私のコードの質の悪さとそれを改善する方法についてのガイダンスも受け入れられます。ありがとうございました。

編集: 例外は、同じキーを持つアイテムが既に作成されていることを示します。この場合、スタックトレースは重要なことを何も示していません。また、コンパイル中ではなく、オブジェクトをリストに追加して保存しようとした後に例外がスローされることにも注意してください。

分離ストレージに保存するために使用しているコードは次のとおりです。MainPage.xaml に移動するとトリガーされます。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        resultList.SelectedItem = null;
        Global.settings["list"] = Global.list;
        Global.settings.Save();
    }

例外はもうありませんが、アプリを終了して再起動しても、保存されたデータは取得されません。

4

1 に答える 1

0

この問題Addは非常に簡単に修正できます。代わりにインデクサーを使用すると、同じ名前のエントリを上書きできます。

settings["list"] = Global.list;

それは呼び出しを修正しませんSave...しかし、私たちがあなたをもっと助けるために、どの例外についての詳細を提供する必要があります(「それが教えてくれる」だけでなく、完全な例外の詳細)。

于 2012-12-01T10:46:08.710 に答える