我想做这样的事情:
<Controls:TreeView>
<Controls:TreeViewItem Header="Persons"
Visibility="{Binding Items[Persons], Path=IsVisible, Converter={StaticResource toVisiblityConverter}}"/>
...
</Controls:TreeView>
(TreeView DataContext绑定到包含字典的ViewModel。字典项的值具有属性IsVisible)。
这不起作用:path属性设置多次。我怎么能避免这个?
答案 0 :(得分:1)
我想你想根据特定键中的IsVisible值隐藏或显示多个树项。实现这一目标的方法很少。
您可以保留模板的默认树部分,为每列生成TreeViewItem
。你可以这样做:
<TreeView x:Name="treeCtrl" Background="LightBlue" HorizontalAlignment="Stretch" Width="300" Height="400" VerticalAlignment="Stretch" Margin="0">
<TreeViewItem Visibility="{Binding Value.IsVisible}">
<TextBlock Foreground="Black" Text="{Binding Key}" />
</TreeViewItem>
</TreeView>
您可以创建项目模板。它是为数据源中的每个项生成的模板。在该模板中,您应该可以轻松访问字典中的一个项目。
另一种可行的方法是编写另一个转换器,它将接受整个字典对象和项目名称作为参数。然后它可以获得c#代码中的值并返回可见性。这样,您可以显式定义要获取其值的列。然后你可以像这样使用它:
<Controls:TreeView>
<Controls:TreeViewItem Header="Persons" Visibility="{Binding Items, Converter={StaticResource dictionaryToVisibilityConverter}, ConverterParameter=Persons}"/>
</Controls:TreeView>