一部のタイプのリストを依存関係プロパティに設定できるようにする必要がある動作を作成しています。明確にするために、ここに例があります:
<SomeUserControl .....>
<i:Interaction.Behaviors>
<local:CustomBehavior PropertyA="False">
<local:CustomBehavior.PropertyBList>
<x:Type Type="local:TypeA" />
<x:Type Type="local:TypeB" />
<x:Type Type="local:TypeC" />
</local:CustomBehavior.PropertyBList>
</local:CustomBehavior>
</i:Interaction.Behaviors>
</SomeUserControl>
ご覧のとおり、動作はXAMLで渡される型のリストを受け入れる必要があります。タイプのコレクションをに渡すことがわかった唯一の方法は、 :DependencyProperty
を使用することです。DependencyPropertyKey
private static readonly DependencyPropertyKey PropertyBListPropertyKey =
DependencyProperty.RegisterReadOnly("PropertyBList", typeof(List<Type>), typeof(CustomBehavior), new PropertyMetadata(new List<Type>()));
public static readonly DependencyProperty PropertyBListProperty = PropertyBListPropertyKey.DependencyProperty;
public List<Type> PropertyBList
{
get { return (List<Type>)GetValue(PropertyBListProperty); }
}
ただし、このアプローチの問題は、コレクションがリセットされないことです。たとえば、UserControls
を使用する2つがある場合CustomBehavior
、PropertyBList
コレクションには両方のユーザーコントロールに追加されたタイプが含まれますPropertyBList
。つまり、この動作を使用するすべてのユーザーコントロール間で共有される静的コレクションのように機能します。
この問題を解決する方法は?その依存関係プロパティをList<Type>
共有ではなく、ユーザーコントロールインスタンス固有にする方法は?