0

私の趣味のプロジェクトでは、次の状況があります。

私はC#、WPF、MVVMを使用しています(まあMVVM:試してみてください)

バイナリ ファイルに情報を読み込み、(符号なし) バイトのリストに格納します。リスト内の特定の場所を参照するクラス階層があります。私のアプリケーションは、クラス階層 (および参照バイト) を変更することがありますが、バイトを直接変更することもあります (範囲のコピーなど)。

リストビューをマップされた構造にバインドしたウィンドウがあります。

クラスのプロパティを変更するときは、MVVM で使用する必要があるため、INotifyPropertyChanged を使用します。ただし、バイトを直接変更すると問題が発生します。現在、手動の Update メソッドを使用していますが、非常に面倒です。

これに対する何らかの解決策はありますか?

また、バイトのリストは 45 MB のデータのようになります。リストに通知を設定すると、バイトが変更されるたびにすべてのオブザーバーに通知されることになりますか? たとえば、10KB のバイトを 1 つずつコピーすると、100 万回の更新で 100 個のオブザーバー関数 (プロパティの変更を処理する) が必要になる場合を意味します。それはパフォーマンスキラーです。

または、次のように言うこともできます: クラス X を更新します (つまり、クラス内のすべてのプロパティの変更)。バイトのコピー中に値が既に変更されているため、プロパティの設定機能を使用できません。

4

2 に答える 2

2

バイトをリスト(List<byte>)に格納している場合は、リストのタイプをに簡単に変更できObservableCollection<byte>、コードはほとんど変更なしで実行されます。次に、手動更新を取り除くことができます。

ただし、データをバイト配列()に保持する場合も、データをにbyte[]変更するのが最善のオプションですがObservableCollection<byte>、コレクションを使用してコードの一部を変更する必要がある場合があります。

処理する特別なケースがある場合、別のオプションは、独自のデータ構造を作成し、実装することINotifyPropertyChangedですINotifyCollectionChanged。しかし、これは書くべきたくさんのコードです。

于 2013-02-26T12:11:23.767 に答える
2

へのバインドを行うことができますObservableCollection<T>

于 2013-02-26T11:55:16.093 に答える