2008-10-01 4 views
3

저는 Silverlight 응용 프로그램을 빌드 중이며 마지막으로 한 가지주의 사항 중 하나는 Silverlight/WPF 방식으로 수행해야 할 것이 있으면 DependecyObject로 개체 모델을 만들고 DependencyPropertyDependence on DependencyObject 및 DependencyProperty

이 모델은 내가 사용하는 클래스의 절반에서 정적 필드와 초기화 프로그램을 필요로하기 때문에 다소 번거롭기 때문에 기존의 이벤트 구동 형 (관찰자 패턴?)을 사용하는 것이 좋습니다 DependencyObject?

코드 팽창과 보일러 플레이트 (나는 그들을 싫어합니다.)를 최소화하고 Silverlight/WPF에서 경험이있는 사람이라면 누구나 DependencyObject 및 DependencyProperty의 사용을 최소한으로 유지하는 데 유용한 팁이 있는지 알고 싶습니다.

이것은 좋은 아이디어입니까?

답변

4

실제로 Silverlight에서는 DependencyObjects를 상속받을 수 없으므로 대신 INotifyPropertyChanged를 구현해야합니다.

구현에서 INotifyPropertyChanged이 DependencyObjects에 비해 많은 장점을 가지고 (DPS)을 (나는이 쉽도록 DO 생략합니다)와 이용 DependencyProperties :

  • 이 더 가볍고
  • 이 개체를 모델링에 더 많은 자유를 할 수 있습니다
  • 쉽게 직렬화 할 수 있습니다.
  • 원하는 경우에만 이벤트를 발생시킬 수 있습니다. 예를 들어 하나의 UI 작업에만 여러 변경 사항을 묶고 싶거나 필요할 때

    • 쉽게 특히 구현하기 : 이벤트를 높이기 위해 데이터는 WPF에서 다음과 같은 장점이 도스 한 상속, 다른 한편으로

    을 (... 다시 그리기 강제로) 변경되지 않은 경우에도 초보자를위한.

  • 무료 (거의) 콜백 메커니즘을 사용하면 속성 값이 변경 될 때 알림을받을 수 있습니다.
  • 강요 메커니즘을 사용하면 속성의 최대, 최소 및 현재 값에 대한 규칙을 정의 할 수 있습니다.

다른 고려 사항이 있지만 주로 설명되어 있습니다.

일반적인 컨센서스는 DP가 컨트롤에 적합하며 Silverlight에서도 사용자 지정 DP를 사용하여 CustomControl을 구현할 수 있다고 생각하지만 데이터 개체의 경우 INotifyPropertyChanged를 구현해야합니다.

HTH, 로랑이 클래스의 목적에 따라 다르지만 메모로 당신이 UIElement에서 상속하지 않고, 직접 실버 라이트 2.0 출시에 DependencyObject에서 상속 할 수있는 것 같다 나는 리처드 동의

3

실제로 어떤 개체를 참조 하느냐에 달려 있습니다. 개체가 XAML 트리에 있어야 할 경우 DependencyProperties (애니메이션, 바인딩, 선택적 자동 자식 상속 등)의 모든 이점을 허용하려면 DependencyProperties를 사용하는 것이 가장 좋습니다 (따라서 모든 UIElements가 수행하는 DependencyObject를 상속하는 것이 가장 좋습니다). 아직 읽지 않은 경우 MSDN overview on DependencyProperties을 읽어 보시기 바랍니다.

개체가 데이터 엔터티 (즉, 값을 XAML 트리의 무언가에 바인딩하는 경우) 인 경우 DependencyObject에서 상속하지 않아도됩니다. 객체의 속성이 읽기/쓰기 인 경우 INotifyPropertyChanged을 구현할 수 있습니다. 그러면 값이 변경 될 때 바인딩이 자동으로 업데이트됩니다.

1

또는 UserControl. 적어도, 나는 그것을 (SilverLight 2.0 RTW) 앱에서하고있다.

System.Windows.DependencyObject on MSDN

그것은 일반적인 대부분의 시나리오 DependencyObject에서 직접 도출되지 입니다. 대신 컨트롤 기본 클래스 중 하나 (ContentControl; Control; ItemsControl), FrameworkElement 또는 Panel 또는 Grid와 같은 UI에 계속 참여하는 컨트롤이 아닌 클래스에서 파생 될 수 있습니다. 종속성 속성을 활성화하려는 비즈니스 또는 데이터 저장소 객체를 정의하거나 연결된 속성을 소유하게 될 서비스 지원 클래스를 만드는 경우 DependencyObject에서 파생되는 것이 적절할 수 있습니다.

HTH

관련 문제