0

私はここで深刻なメンタルブロックを抱えており、助けが必要です。私は Windows Phone Databound Application をプロジェクトの出発点として使用していますが、モデル、ビューモデル、およびビューがどのように相互作用するかにかなり満足しています。

私の問題は、例で使用されているデータが実行時に作成され、ObservableCollection オブジェクトに追加されることです。私の理解では、新しい ItemViewModel オブジェクトを作成し、その後 ObservableCollection に追加すると、NotifyPropertyChanged イベントに相当するイベントが発生し、ビューのバインディングがすべて更新されます。私の説明が間違っている場合は、どんな考えでも歓迎します。

現在、データのランタイム生成は、ほとんどの実際の例では役に立たないため、データを分離ストレージにシリアル化する必要があります。これは私が行ったもので、ObservableCollection オブジェクトを正常に保存およびロードできます。

私の問題は、IsolatedStorage からデータをロードし、返された ObservableCollection をビュー モデルの Items オブジェクトに割り当てるときに発生します。

    public void LoadData()
    {
        App.Measurements = Serialization.Read<measurements>(App.MEASUREMENTS);
        this.IsDataLoaded = true;
    }

App.MEASUREMENTS は、IsolatedStorage で使用されるファイル名を含む単純なグローバル変数です。

上記のコードはデータを取得して Items ObservableCollection に割り当てますが、UI は更新されません。上記のコードを次のように置き換えると:

    public void LoadData()
    {
        foreach (measurement m in App.Measurements.WeightMeasurements)
        {
            this.Items.Add(m);
        }
        this.IsDataLoaded = true;
    }

取得したコレクションを反復処理し、新しい ItemViewModel コレクションを Items コレクションに追加すると、UI ですべてが正しく更新されます。

私のxamlには正しいバインディングがあり、DataContextも正しく設定されています。

これを解決するために多くの方法を試しましたが、ロードされたコレクション全体を繰り返し処理して、イベントが発生するものだけを Items コレクションに追加するしかないとは信じられません!

どんな考えでも大歓迎です。

ジェイソン。

4

2 に答える 2

2

に INotifyPropertyChanged を実装していItemsますか?

ObservableCollection として、コレクション内の個々のアイテムが変更されたときに INPC の呼び出しを処理しますが、プロパティ自体に対してこれを処理する必要があります。

于 2011-07-05T09:26:39.553 に答える
0

とうとう底にたどり着きました。それは、ObservableCollection の定義に関係していました。箱から出すとこんな感じ

    public ObservableCollection<ItemViewModel> Items { get; private set; }

ただし、NotifyPropertyChanged は、プロパティが次のように定義されている場合にのみ発生します。

    private ObservableCollection<ItemViewModel> _items;
    public ObservableCollection<ItemViewModel> Items
    {
        get
        {
            return _items;
        }
        private set
        {
            if(_items != value)
                _items = value;
            NotifyPropertyChanged("Items");
        }
    }

Items は INotifyPropertyChanged を実装しましたが、Items オブジェクトが割り当てられているときに呼び出されることはありませんでした。

すべてが期待どおりに機能するようになり、ロードされたコレクションを繰り返し処理して Items ObservableCollection に追加する必要がなくなりました。

于 2011-07-05T20:44:20.497 に答える