問題がウェブで何度も議論されていることを知っていますか。しかし、私のものは特定のケースであり、私はまだ正しい解決策を見つけていません。
シナリオ:Silverlight 4-2つのHierarchicalDataTemplateによって表示されるデータを含むTreeView。1つは第1レベルのデータ(つまり、TreeViewの親アイテムのデータ)を表示し、もう1つは第2レベルのデータ(子の場合)を表示します。アイテム)。子アイテムテンプレートでは、コントロールの可視性を親テンプレートのデータソースクラスのプロパティにバインドする必要があります。
これはXAMLコードです。
<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>
WPFの場合、次のように記述できます。
Visibility = "{Binding DataContext.Ori、Converter = {StaticResource rVisibilityConverter}、RelativeSource = {RelativeSource AncestorLevel = 2、AncestorType = {x:Type TreeViewItem}、Mode = FindAncestor}}"
...そしてそれは確かに機能します。ただし、Silverlightでは、RealitiveSourceを使用したバインディングモードとしてのFindAncestorがサポートされていないことを知っています。Webのソリューションは、ビジュアルツリーのコードビハインドで下にスクロールすることです。ビヘイビアで実現されているか、アタッチされたプロパティで実現されているかは関係ありません。解決策は次のとおりです。
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」は何もありません。スクロールするビジュアルツリーがありません。
提案はありますか?前もって感謝します!ピレッギ