2011-02-28 2 views
2

연습 문제로 WP 패널 사용자 정의 컨트롤을 작성하여 VS 패널 (오류/경고/메시지)에 로그 메시지를 표시합니다. 컨트롤은 ItemControl이며 모든 항목은 표시 할 메시지입니다. 그러나 적절한 범주의 메시지를 분류해야하므로 컨트롤을 메시지를 분류하는 방법을 알 수 있도록 각 항목에 인터페이스 (인터페이스)를 표시해야합니다. Item을 특정 유형으로 강제 변환하는 방법을 모르겠습니다. 어떻게이 작업을 수행 할 수 있습니까? 디자인 시작이 잘못 되었습니까? 감사합니다.WPF ItemControl : 항목 유형을 특정 항목으로 제한합니다.

<Setter Property="ItemsSource" Value="{Binding MyStronglyTypedCollectionalPropertyName}" /> 

내가 ObservableCollections에 많은 수행

답변

1

당신이 컨트롤의 템플릿에 다음 ItemsControl에서 사용자 지정 컨트롤을 상속 강력한 형식의 collectional 속성을 만들 수는 다음 줄을 넣어.

ItemsControl을 사용한다고해서 ItemsSource를 직접 사용할 필요가 없다는 사실을 대신 바인딩 할 수 있습니다.

P. 기술적으로 말하자면 여전히 누군가가 가서 MyStronglyTypedCollectionalPropertyName을 직접 건너 뛰어 ItemsSource를 설정할 가능성이 있습니다. 개인적으로 나는 그 경우를 던지는 것이 좋은 생각이라고 생각하지 않지만 OnPropertyChanged 내에서 값 유형을 확인할 수 있습니다.

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgse) 
{ 

    if (e.Property == ItemsControl.ItemsSourceProperty && e.NewValue as MySuperTime == null) 
    { 

     throw new ArgumentException("ItemsSource value must be of 'MySuperTime' type."); 
    } 

    base.OnPropertyChanged(e); 

} 
관련 문제