문제가 여러 번 웹에서 논의 된 것을 알고 있습니다. 그러나 내 경우는 특별한 경우이며 올바른 해결책을 찾지 못했습니다.DataTemplate이 다른 Datatemplate에 중첩되어 있으면 father-template 속성과의 바인딩이 어렵습니다.
시나리오 : Silverlight 4 - 두 개의 HierarchicalDataTemplate이 보여주는 데이터가있는 TreeView, 첫 번째 수준의 데이터 (예 : TreeView의 아버지 항목 데이터) 및 두 번째 수준의 데이터를 표시하는 TreeView 어린이 용품). 하위 항목 템플릿에서 컨트롤의 가시성을 아버지 템플릿의 데이터 소스 클래스의 속성에 바인딩해야합니다. 이 WPF라면
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
<Grid>
<TextBlock
Visibility="{Binding ???}"/>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="modTreeArtDataParts"
ItemTemplate = "{StaticResource modTreeArtDataParts2}"
ItemsSource = "{Binding RicambiItemList}">
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView
ItemTemplate = "{StaticResource modTreeArtDataParts}"
ItemsSource="{Binding RicambiList}"/>
</Grid>
내가 작성할 수 있습니다 : = "{DataContext.Ori, 컨버터 = {정적 리소스 rVisibilityConverter}, RelativeSource = {RelativeSource AncestorLevel 바인딩
가시성
이
는 XAML 코드 = 2, AncestorType = {x : Type TreeViewItem}, Mode = FindAncestor}} "... 확실히 작동합니다. 하지만 Silverlight에서 RealAudio를 사용하는 바인딩 모드 인 FindAncestor는 지원되지 않습니다.. 웹상의 솔루션은 시각적 트리의 코드 숨김으로 아래로 스크롤하여 주위에 있습니다. 그것은 행동이나 첨부 된 성취와 함께 실현되는지 여부는 중요하지 않습니다. 해결책은 다음과 같습니다 :
Public Class hideTextBlockBehavior
Inherits Behavior(Of DependencyObject)
Protected Overrides Sub OnAttached()
MyBase.OnAttached()
Dim g As Grid = FindVisualParent(Of Grid)(AssociatedObject)
Dim o As customType = g.DataContext
If o.hide Then AssociatedObject.Visibility = Visibility.Collapsed
End Sub
Private Function FindVisualParent(Of parentItem As DependencyObject)(ByVal obj As DependencyObject) As parentItem
Dim objParent As DependencyObject = obj
While obj Is Nothing = False AndAlso TypeOf obj Is parentItem = False
obj = VisualTreeHelper.GetParent(obj)
End While
Return DirectCast(obj, parentItem)
End Function
End Class
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
<Grid>
<TextBlock>
<i:Interaction.Behaviors>
<il:hideTextBlockBehavior/>
</i:Interaction.Behaviors>
</TextBlock>
</Grid>
</HierarchicalDataTemplate>
이렇게 많은 솔루션을 사용했고 항상 작동합니다. 하지만이 경우 내 DataTemplate은 을 다른 DataTemplate에 내포하면 "OnAttached"메서드에서 "AssociatedObject"속성 "Parent"가 아무 것도 아닌데 스크롤 할 시각적 트리가 없습니다 .
의견이 있으십니까? 미리 감사드립니다. PILEGGI
그래, 생각해 봤어.하지만 조금 중복 된 거지? – lamarmora
Silverlight의 단점 (WPF의 풍부함에 반대)에 대한 대부분의 해결 방법이 유사한 구문으로 이어질 것이라고 생각하지만 다소 중복됩니다. 개인적으로, 나는 커스텀 코드에서 비주얼 트리를 순식간에 순회하는 것을 발견했다. Silverlight 5로 업그레이드하거나 변환기를 사용하는 것은 다른 옵션입니다. 뷰 모델 검색기 서비스를 사용하는 경우 참조없이 이동할 수도 있습니다. – ericontilt