2012-02-23 93 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> 
    
相關問題