0

私は現在、c# で Windows ストア アプリに取り組んでいます。

今、私はテキストボックス「タスク」からボタンクリックイベントでアイテムを取得するリストボックス「Listbox1」を持っており、他のボタンクリックイベントでアイテム削除プロパティを選択しています。

private void add_Click(object sender, RoutedEventArgs e)
    {
        string t;
        t = tasks.Text;
        if (t != "")
        {
            Listbox1.Items.Add(t);
        }
        else
        {
            var a = new MessageDialog("Please Enter the Task First");
            a.Commands.Add(new UICommand("Ok"));
            a.ShowAsync();
        }
        tasks.Text = "";
    }

    private void del_Click(object sender, RoutedEventArgs e)
    {
        for (int p = 0; p < Listbox1.SelectedItems.Count; p++)
        {
            Listbox1.Items.Remove(Listbox1.SelectedItems[p].ToString());
            p--;
        }
    }

ユーザーが変更を完了した後(おそらくボタンクリックイベントで)、このリストをローカルアプリケーションストレージに保存したいと思います。また、すべてのリストボックス項目を別のページに送信します。

私はコーダーではなく、デザインをしています。

サンプルまたは参照で私を導いてください。

前もって感謝します :)

4

2 に答える 2

0

既にデータをローカル ストレージに保存しているOnNavigatedTo場合は、他のページのオーバーライドで読み取ることができます。それ以外の場合は、ナビゲーション パラメーターを使用します

編集:ローカルストレージに関する情報も必要かどうかはわかりません。これは簡単ですWindows.Storage.ApplicationData.Current.LocalSettings。Values というプロパティがありDictionary、設定を書き込むことができます。http://msdn.microsoft.com/en-us/library/windows/apps/hh700361.aspxをご覧ください

編集:リストを保存するには、このコードのようなものを試してください。

// Try to get the old stuff from local storage.
object oldData = null;
ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;
bool isFound = settings.Values.TryGetValue("List", out oldData);

// Save a list to local storage. (You cannot store the list directly, because it is not
// serialisable, so we use the detours via an array.)
List<string> newData = new List<string>(new string[] { "test", "blah", "blubb" });
settings.Values["List"] = newData.ToArray();

// Test whether the saved list contains the expected data.
Debug.Assert(!isFound || Enumerable.SequenceEqual((string[]) oldData, newData));

これはテスト用のデモ コードにすぎないことに注意してください。意味はありません...

編集: 1 つのアドバイス: リストが大きくなると非常に遅くなるため、クリック ハンドラーにリストを永続化しないでください。リストをロードしてナビゲーション ハンドラに保存します。つまり、次のようなものを追加します。

protected override void OnNavigatedTo(NavigationEventArgs e) {
    base.OnNavigatedTo(e);
    if (this.ListBox1.ItemsSource == null) {
        object list;
        if (ApplicationData.Current.LocalSettings.Values.TryGetValue("List", out list)) {
            this.ListBox1.ItemsSource = new List<string>((string[]) list);
        } else {
            this.ListBox1.ItemsSource = new List<string>();  
        }
    }
}

protected override void OnNavigatedFrom(NavigationEventArgs e) {
    if (this.ListBox1.ItemsSource != null) {
        ApplicationData.Current.LocalSettings.Values["List"] = this.ListBox1.ItemsSource.ToArray();         
    }
    base.OnNavigatedFrom(e);
}
于 2013-07-14T07:43:56.417 に答える
0

これは、winRT アプリ開発における SQLite データベースの使用に関する非常に優れた単純な例です。それを見ると、ローカル マシンにデータを保存する方法がわかります。この例から基本的なコードを学びました。

http://blogs.msdn.com/b/robertgreen/archive/2012/11/13/using-sqlite-in-windows-store-apps.aspx

ここで、ナビゲーションを容易にするために、アプリのこの部分のフローを提案します。

ObservableCollection<>の 1 つを取りstring、その textBox の値をこの ObservationCollection に格納し、それを listBoxのにonClick()参照します。ObservableCollection<String>ItemsList

データを次のページに送信する必要があるときに、次のページのパラメーター化されたコンストラクターを1つ作成しObservableCollection<String>、それをパラメーターとして渡します。

これで、コンストラクターでこれらのデータにアクセスし、必要に応じて使用できます。

これが役立つことを願っています..

于 2013-07-15T09:09:17.650 に答える