2013-01-06 1 views
0

일부 형식의 목록을 종속성 속성으로 설정할 수 있도록 동작을 만들고 있습니다. 예를 들어 다음과 같습니다.동작의 컬렉션 형식 DependencyProperty <T>

<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에서 전달 된 형식 목록을 받아 들일 필요가 있습니다.

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); } 
} 

그러나,이 방법에 문제가 컬렉션 재설정되지 않습니다이다 : 나는 DependencyProperty에 유형의 컬렉션을 통과하는 것으로 유일한 방법은 DependencyPropertyKey 사용하는 것입니다. 예를 들어, CustomBehavior을 사용하는 두 개의 UserControls이있는 경우 PropertyBList 컬렉션에는 두 가지 usercontrols에 추가 된 유형이 포함되므로 PropertyBList은이 동작을 사용하는 모든 usercontrol간에 공유되는 정적 컬렉션처럼 동작합니다.

이 문제를 해결하는 방법은 무엇입니까? List<Type>의 종속성 속성을 공유하는 방법이 아닌 usercontrol 인스턴스에 종속시키는 방법은 무엇입니까?

답변

1

문제는 PropertyBList 값을 모든 CustomBehavior 인스턴스에서 공유하는 속성 메타 데이터의 기본값으로 초기화한다는 것입니다. 대신에 CustomBehavior 생성자에서 값을 초기화 할 수 있습니다.

private static readonly DependencyPropertyKey PropertyBListPropertyKey = 
    DependencyProperty.RegisterReadOnly(
     "PropertyBList", typeof(List<Type>), typeof(CustomBehavior), null); 

public static readonly DependencyProperty PropertyBListProperty = 
    PropertyBListPropertyKey.DependencyProperty; 

public List<Type> PropertyBList 
{ 
    get { return (List<Type>)GetValue(PropertyBListProperty); } 
} 

public CustomBehavior() 
{ 
    SetValue(PropertyBListPropertyKey, new List<Type>()); 
}