2012-02-23 133 views
1

我想让这样的事情:如何绑定字典项目属性?

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

(TreeView控件的DataContext绑定到包含字典和词典项目的价值有属性IsVisible视图模型)。

这不起作用:路径属性设置不止一次。我怎样才能避免这种情况?

回答

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> 
    
相关问题