1

操作の種類が異なる4つの異なるビューがあります。ビューを作成するために DateTemplate を使用しています

<DateTemplate DateType={X:Type HomeViewModel}" >
     <HomeView>
</DateTemplate>
<DateTemplate DateType={X:Type DeviceDateViewModel}" >
     <DeviceDateView>
</DateTemplate>

私はContentControlを持っており、すべてのViewModelはContentプロパティにバインドされており、「ActiveView」と言います

すべての ViewModel を作成し、辞書に保存しました。ビューを変更したいときは、表示したい新しいビューに ActiveView を割り当てるだけです。

void ActiveteView(ViewType viewType)
{
    ActiveView = GetViewFromDictionary(viewType);
}

コントロールの 1 つが DataBinding をサポートしていないため、View のビハインド コードに新しいコントロールをいくつか作成しました。

私の問題は次のとおりです。ActiveView を変更すると、ContentControl に新しいビューと表示が作成されます。そのため、私は問題を抱えています。私の古いビューはまだメモリにあります。それらを破壊する方法は?

現時点では、デザインを変更することはできません。私たちはそれと一緒に暮らす状況にあります。

4

1 に答える 1

0

VM がディクショナリにある場合、ガベージ コレクションはそれを収集しません。GC がいつオブジェクトを収集するかについては、たくさんのルールがあります。ガベージ コレクションのすべて

ガベージ コレクションを強制する方法はありますが、マネージ コードを使用する利点が失われます。一般的に言えば、そのオブジェクトへの参照を保持していない限り、GC は最終的にそれを収集する必要があります。このようなコレクションを強制することはできますが、それは設計に問題があることを示しています。

MSDNによると:

「Collect を呼び出してガベージ コレクションを強制することは可能ですが、ほとんどの場合、これはパフォーマンスの問題を引き起こす可能性があるため、避ける必要があります。」

于 2013-10-31T13:20:28.263 に答える