2010-01-18 9 views
0

저는 visio와 비슷한 WPF 응용 프로그램을 만들고 있습니다. 각 다이어그램에서 UIElement 인 항목을 논리적으로 그룹화하고 그룹 수준에서 특정 동작 (예 : 가시성)을 제어 할 수 있기를 바랍니다.WPF 다른 개체의 종속성 속성에 바인딩 하시겠습니까?

첫 번째 시도는 너비가 & height = 0 인 그룹이라는 컨트롤을 만드는 것이 었습니다. 그룹 속성을 통해 특정 "그룹"에 다이어그램 요소를 할당하고 특정 UIElement를 바인딩하려고했습니다. 속성을 다음과 같이 그룹 값에 추가합니다.

<DiagramNode 
     Width="300" Height="300" 
     Visibility="{Binding RelativeSource={RelativeSource Self},Path=Group.Visibility}" 
     > ... </DiagramNode > 

이 경우에도 바인딩 오류가 발생하지 않지만 작동하지 않습니다. 그룹의 가시성을 변경해도 해당 그룹에 할당 된 노드의 가시성에 영향을 미치지 않습니다. 내가 말할 수있는 한 오류는 언제나 나타나지 않고 작동하지 않습니다.

아이디어가 있으십니까? 내 접근이 가능한가? 그렇지 않다면 어느 누구도 대안을 제시 할 것입니다. :). 나는 커다란 UI 녀석이 아니며 서비스 계층에서 훨씬 편하게 느껴지므로 다른 제안을 할 수있다.

답변

0

디버거를 실행할 때 응용 프로그램의 추적에 바인딩 오류가없는 경우 문제는 변경 알림에있는 것일 수 있습니다. 변경 될 때 Group 개체의 Visibility 속성이 변경 알림을 제공하는지 확인해야합니다.

이것은 일반적으로 클래스에 INotifyPropertyChanged을 구현하고 PropertyChanged 이벤트를 발생시키는 액세스 접근 자 (값이 실제로 변경된 경우)로 수행됩니다.

+0

Aviad. 내 그룹 개체가 UserControl에서 상속하므로 내 Group 개체가 Visibility 속성에 대해 INotifyPropertyChanged를 구현한다고 생각합니다. 동의하니? – Frank

+0

또한 실제로 'Visibility' 속성 설정 기에서'PropertyChanged' 이벤트를 발생 시키나요? 이것은 명시 적으로 수행되어야합니다. –

+0

UserControl은 * NOT * INotifyPropertyChanged를 구현하지 않습니다. 그러나 Group이 UserControl 인 경우 Group.Visibility는 종속성 속성이므로 변경 알림을 바인딩 소스로 제기 할 필요가 없습니다. 문제 진단에 도움이되는 그룹 정의를 게시 할 수 있습니다. – itowlson

0

아마도 내 DiagramNode 클래스의 Group 객체에 대한 내 속성 선언에 문제가 있습니까?

Public Class DiagramNode 
... 
Private _group As Group 
Public Property Group() As Group 
    Get 
     Return Me._group 
    End Get 
    Set(ByVal value As Group) 
     Me._group = value 
    End Set 
End Property 
... 
End Class 
관련 문제