2009-09-03 8 views
0

나는 개발중인 wpf 컨트롤이 있습니다.종속성 속성 올바른 사용

이 컨트롤은 다른 컨트롤을 포함하고 캡슐화합니다.

컨트롤을 사용하는 창에 내부 컨트롤의 속성을 노출하려고합니다. 또한이 속성이 변경되면 내부 컨트롤에서 논리를 수행하기를 원합니다.

제안 사항?

+0

그냥 아무튼 어떤 오류 ' T는 작품 ... 내가 두 속성에 메타 데이터를 정의해야합니다. –

답변

2

내부 컨트롤과 외부 컨트롤은 모두 종속성 속성을 정의해야합니다. 외부 제어를위한 템플릿 내부 제어를 포함해야하며, 등록을 함께 결합한다 :

<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/> 

이 모두 사용자의 제어와는 독립적으로 사용할 수있는 서로로부터 분리되어 보장한다. 속성은 해당 컨트롤에서의 사용에 따라 명명 될 수 있습니다. 예를 들어 내부 컨트롤은 Text과 같은 것으로, 외부 컨트롤은 CustomerName과 같은 더 구체적인 용도로 사용합니다.

+0

올바른 방법입니다. 프록시 속성은 DependencyProperty가 아니므로 적절한 바인딩 동작을 제공하지 않습니다. – AndyM

0

종속성 속성 업데이트는 DependencyProperty의 일부로 정의 된 속성 메타 데이터를 통해 처리됩니다. (또한 기존의 드프 추가,하지만 그건 다른 주제의 수 있습니다.)

메타 데이터와 함께하는 DependencyProperty를 정의 콜백

public static readonly DependencyProperty MyValueProperty = 
    DependencyProperty.Register("MyValue", typeof(object), typeof(MyControl), 
    new UIPropertyMetadata(null, new PropertyChangedCallback(MyValue_PropertyChanged))); 

그런 다음 구현합니다

private static void MyValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    MyControl c = (MyControl)d; 
    c.DoSomething(); 
}