문제

나는 Silverlight 애플리케이션을 구축하고 있으며 지난 시간부터 내 경고 중 하나를 구축하는 것이 Silverlight/WPF 방식으로 수행 해야하는 경우 객체를 PesponecyObject로 모델링하고 종속성 프로퍼티 (IES)를 사용해야한다는 것입니다.

이 모델은 다소 번거롭고 사용하는 클래스의 절반에 정적 필드와 이니셜 라이저가 필요하다는 것을 알았으므로 종속성 이점 대신에 좋은 이전 이벤트 중심 (관찰자 패턴)을 사용하는 것이 좋습니다.

나는 코드 팽창 및 보일러 플레이트를 최소화하고자하는 것을 목표로하고 있으며 (싫어) Silverlight/WPF에 대한 경험이있는 사람이라면 누구나 의존성과 의존성 전문가의 사용을 최소로 유지하기위한 팁/기술이 있는지 알고 싶습니다.

이것이 좋은 생각입니까?

도움이 되었습니까?

해결책

실제로, Silverlight에서는 의존성을 상속 할 수 없으므로 대신 inotifyPropertyChanged를 구현해야합니다.

inotifyPropertyChanged를 구현하는 것은 종속성 관찰에 비해 많은 장점이 있습니다 (나는 이것을 더 쉽게 만들기 위해 이것을 약화시킬 것입니다) 및 dependencyProperties (dps)를 사용합니다.

  • 이것은 더 가볍습니다
  • 객체를 모델링하는 데 더 많은 자유를 얻을 수 있습니다
  • 쉽게 직렬화 할 수 있습니다
  • 예를 들어 하나의 UI 작업에서만 여러 변경 사항을 묶으려고 할 때 또는 데이터가 변경되지 않은 경우에도 이벤트를 올릴 때와 같은 특정 시나리오에서 유용 할 수있는 이벤트를 원할 수 있습니다. 강제로 그리기 ...)

반면에 WPF의 DOS를 상속하는 것은 다음과 같은 장점이 있습니다.

  • 특히 초보자를 위해 쉽게 구현할 수 있습니다.
  • 콜백 메커니즘 (거의)을 무료로 받으므로 속성 값이 변경 될 때 알림을받을 수 있습니다.
  • 당신은 강요 메커니즘을 통해 속성의 최대, 최소 및 현재 가치에 대한 규칙을 정의 할 수 있습니다.

다른 고려 사항이 있지만 이것들은 주된 것입니다.

일반적인 합의는 DPS가 컨트롤에 적합하다는 것입니다 (Silverlight에서도 사용자 정의 DPS를 사용하여 사용자 정의 콘트롤을 구현할 수 있음) 그러나 데이터 객체의 경우 inotifyPropertyChanged를 구현해야합니다.

HTH, LAURENT

다른 팁

그것은 당신이 참조하는 객체에 달려 있습니다. 객체가 XAML 트리에 앉기 위해 의도 된 경우, 종속성 분야가 제공하는 모든 이점 (애니메이션 가능, 바인딩, 선택적 자동 아동 상속 등)을 허용하기 위해 의존성 요소 (따라서 모든 uielements가하는 의존성 - 상속)를 사용하는 것이 가장 좋습니다. 나는 당신이 그것을 읽는 것이 좋습니다 MSDN의 종속성 분류에 대한 개요 당신이 아직하지 않았다면.

객체가 데이터 엔티티 인 경우 (예 : XAML 트리의 값에 값을 바인딩하고 있음) 종속성 관찰에서 상속받을 필요가 없습니다. 객체의 속성이 읽기 쓰기 인 경우 구현할 수 있습니다. inotifyPropertyChanged, 값이 변경 될 때 바인딩이 자동으로 업데이트 될 수 있습니다.

Richard는 그것이 당신의 클래스의 목적에 의존한다는 데 동의하지만, Uielement 또는 Usercontrol에서 상속받지 않고 Silverlight 2.0 릴리스에서 의존성을 직접 상속받을 수있는 것으로 보입니다. 적어도 (Silverlight 2.0 RTW) 앱에서 그렇게하고 있습니다.

MSDN의 System.Windows.DependencyObject

그것은이다 일반적이지 않습니다 대부분의 시나리오에 대해 종속성에서 직접 도출합니다. 대신 특정 컨트롤, 제어 기반 클래스 중 하나 (ContentControl; Control; Itemscontrol), 프레임 워크가 또는 패널 또는 그리드와 같은 UI에 여전히 참여하는 비 통제 클래스에서 얻을 수 있습니다. 종속성 속성을 활성화하려는 비즈니스 또는 데이터 스토리지 개체를 정의하거나 첨부 된 속성을 소유 할 서비스 지원 클래스를 작성하는 경우에는 종속성 작업에서 도출하는 것이 적절할 수 있습니다.

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top