2014-04-30 2 views
0

모든 ObservableCollection에 대해 T는 내 개인 논리 클래스 중 하나가 될 수있는 다른 연결된 속성을 만들고 싶지 않으므로 좀 더 일반적인 것이 가능한지 궁금합니다.ObservableCollection <T>을 첨부 된 속성으로 사용 하시겠습니까?

보다 구체적으로, DependencyProperty.RegisterAttached를 사용할 때 소유자 유형을 ObservableCollection으로하고 싶습니다.

이게 가능합니까?

+0

당신이 이것을 사용하고자하는 구체적인 예를들 수 있습니까? 사용자 정의 컨트롤을 만들지 또는 다른 유형의 개체를 만들지 여부에 따라 답변이 실제로 달라집니다. –

+0

관찰 가능한 컬렉션 MichaelLo

+0

을 바인드하는 첨부 된 속성을 만들고 싶습니다. 유형 T로 연결된 속성 클래스를 만들 수 없으므로 (xaml이 콘크리트 유형을 어떻게 만들겠습니까?) 문제가 있습니다. – MichaelLo

답변

1

이렇게 할 수 있지만 각 유형에 대한 구체적인 클래스를 만들어야합니다. 나는 모든 ObservableCollection에 대해 다른 연결된 속성을 만들려고하지 않기 때문에 (하나만이이이 문제를 해결

,

즉, - 이것은 당신이 당신이 말하는 문제를 해결할 수 첨부 된 속성). 그러나 당신은 여전히 ​​상속의 방식에 의해 구체적인 유형을 정의 할 단일 라인이 필요합니다. XAML에서

public class X<T> 
{ 
    public static ObservableCollection<T> GetCollection(DependencyObject obj) 
    { 
     return (ObservableCollection<T>)obj.GetValue(CollectionProperty); 
    } 

    public static void SetCollection(DependencyObject obj, ObservableCollection<T> value) 
    { 
     obj.SetValue(CollectionProperty, value); 
    } 

    // Using a DependencyProperty as the backing store for Collection. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty CollectionProperty = 
     DependencyProperty.RegisterAttached("Collection", typeof(ObservableCollection<T>), typeof(X<T>), new PropertyMetadata(null)); 


} 

public class XInt : X<int> { } 

: 그리고

<Grid local:XInt.Collection="{Binding}"> 

</Grid> 

좀 더 명확하게 당신이하려고하는 무엇인지 설명 할 수있는 경우 (즉, 당신이 특정 유형으로 첨부 프로퍼티를 필요로 왜) 이에 대한 더 나은 해결책이있을 수 있습니다. 예를 들어, 형식을 IList로 설정 한 다음 IList 또는 IEnumerable 또는 INotifyCollectionChanged로 필요한 기능에 따라 캐스트하지 않는 것이 좋습니다.

관련 문제