0

WinRT XAML を使用しています。

B依存関係プロパティを持つカスタム コントロールがItemsあり、そのコントロールは別のコントロールのテンプレートにあります。PropertMetadata依存関係プロパティは、型を使用して新しい空のコレクションに初期化されます。データにバインドされることはありません - 覚えておいてください。

ページに入ると、コントロールは別のカスタム コントロールのテンプレートの一部としてインスタンス化されますA。のコンストラクターのブレークポイントから、Bの値を確認するとItems、項目が 0 個含まれています。

他のアクティビティの一部として、データを挿入するA呼び出しを「手動で」制御します。B.Items.Add()データバインディングはありません。

逆方向に移動してからクリックしてページに再度移動すると、コンストラクターが再び起動されますが、今回Itemsはまだ追加された値が残っていますA。それはその価値を保持します。

そのため、コントロールがアンロードおよびロードされても (イベントを確認できます)、コントロールと依存関係プロパティは再初期化されません。

これは正しいです?

4

1 に答える 1

3

依存関係プロパティは、クラスで静的フィールドとして宣言されますB。これは 1 回だけ初期化されるため、プロパティ メタデータの新しいコレクションは 1 回だけ初期化され、その後プロパティのすべての「インスタンス」によって共有されます。これは、依存関係プロパティの宣言でよくある間違いです。

Bプロパティ メタデータによって既定値を提供するのではなく、クラスのコンストラクターで依存関係プロパティの値を新しい空のコレクションに設定する必要があります。

于 2013-10-08T20:48:09.247 に答える