如何绑定字典项属性?

时间:2012-02-23 16:02:06

标签: silverlight xaml dictionary

我想做这样的事情:

<Controls:TreeView>
   <Controls:TreeViewItem Header="Persons" 
         Visibility="{Binding Items[Persons], Path=IsVisible, Converter={StaticResource toVisiblityConverter}}"/>
   ...
</Controls:TreeView>

(TreeView DataContext绑定到包含字典的ViewModel。字典项的值具有属性IsVisible)。

这不起作用:path属性设置多次。我怎么能避免这个?

1 个答案:

答案 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>