2016-06-23 4 views
1

C# WPF MVVM 프로젝트에서 데코레이터 패턴을 사용하여 속성 격자의 속성 정의를 정의 할 수 있습니까? 따라서 속성 격자에 특정 기능을 구현하고자합니다. 특히 속성에서 해당 속성 표에 대한 변경 사항을 처리하고 런타임에 응답으로 더 많은 속성을 생성 할 수 있어야합니다.C# WPF 속성 표에서 런타임에 속성 격자 정의를 정의하는 데 데코레이터 패턴을 사용하는 것이 효율적입니까?

누군가가 선택한 옵션을 기반으로 속성 표의 드롭 다운에서 특정 옵션을 선택하면 그 아래에 다른 속성이 생성됩니까? 효율적으로 속성 격자의 다른보기의 순열을 정의하는 데 데코레이터 패턴을 사용하겠습니까? 또는이 유형의 기능을 처리 할 수있는 더 나은 패턴 또는 메소드가 있습니까?

답변

0

을 추가 속성 행인으로 활성화하면 아이디어가 상당히 좋은 것으로 들립니다. 처리기는 현재 PropertyGrid 인스턴스를 원래 인스턴스를 래핑하는 말 AddiotionalSelection1PropGrid의 새 인스턴스 인스턴스로 바꿉니다.

추가 기능을 비활성화 하시겠습니까? 데코레이터 체인을 탐색하고 비활성화되어야하는 데코레이터를 제거 하시겠습니까? 이것은 약간 추한 것 같아요. 이렇게하려면 데코레이터를 데코레이터 외부에서 사용할 수 있도록해야합니다. 장식 된 인스턴스는 decoratée과 같은 인터페이스를 가지지 않기 때문에 이런 종류의 장식 패턴은 깨집니다.

이 해결책은 속성 목록을 확장하는 각 데코레이터에 대한 역 데코레이터를 만드는 것일 수 있습니다. 역 데코레이터는 추가 속성이 모두있는 경우 제거합니다. 역 데코레이터 코드에서 매우 우아하게이 문제를 해결하지만, 몇 가지 단점이 있습니다

  • 그것은 장식의 숫자가 특정 속성을 추가 정확하게 이러한 속성을 제거하는 역을 수있는 각 장식에 관해서는, 두 배를
  • 사용자가 속성을 많이 활성화/비활성화하거나 UI의 수명이 길면 데코레이터 체인이 길어질 수 있습니다. 그들은 이되면 성능 문제가 발생할 수 있습니다. 각 데코레이터의 메모리 사용 공간은 최소화해야합니다.
+0

그래, 나는 그것에 대해 생각하지 않았다. PropertyGrid.selectedobject와 Data Context로 보낼 객체를 만드는 팩터 리 패턴은 어떻습니까? 그게 깨끗한가? \ – user3290306

+0

@ user3290306, 나는 내 대답을 제안으로 업데이트했다. 시나리오에서 이것이 합리적인 것 같으면 확인해 주시겠습니까? –