2009-09-21 62 views
1

我有一個TreeView,其中我使用了HierarchicalDataTemplate。有了這個,我爲不同的項目(所有相同類型)着色。WPF在樹狀圖中隱藏帶觸發器的項目

點擊頁面上的CheckBox,我想隱藏一些項目(帶有某個屬性)。我測試了很多代碼,但沒有任何工作正常。我在尋找答案...

這裏是我的代碼示例:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     TreeElements tRoot = new TreeElements("Root", false); 
     TreeElements t1 = new TreeElements("Node 1", false); 
     TreeElements t11 = new TreeElements("Node 1-1", true); 
     t1.Children.Add(t11); 
     TreeElements t12 = new TreeElements("Node 1-2", false); 
     t1.Children.Add(t12); 
     tRoot.Children.Add(t1); 
     TreeElements t2 = new TreeElements("Node 2", false); 
     TreeElements t21= new TreeElements("Node 2-1", false); 
     TreeElements t211 = new TreeElements("Node 2-1-1", false); 
     t21.Children.Add(t211); 
     t2.Children.Add(t21); 
     tRoot.Children.Add(t2); 
     trv.Items.Add(tRoot); 
    } 
} 

public class TreeElements 
{ 
    public string Description { get; set; } 
    public List<TreeElements> Children { get; set; } 

    public TreeElements(string description, bool error) 
    { 
     Description = description; 
     _error = error; 
     Children = new List<TreeElements>(); 
    } 

    private bool _error; 

    public bool Error 
    { 
     get 
     { 
      bool bValue = _error; 
      foreach (TreeElements child in Children) 
       bValue = bValue || child.Error; 
      return bValue; 
     } 
    } 
} 

而XAML:

<Window x:Class="WpfApplication2.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <HierarchicalDataTemplate x:Key="HDT_items" ItemsSource="{Binding Path=Children}"> 
      <TextBlock Text="{Binding Path=Description}" x:Name="txt" /> 
      <HierarchicalDataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=Error}" Value="true"> 
        <Setter TargetName="txt" Property="Foreground" Value="Red" /> 
       </DataTrigger> 
      </HierarchicalDataTemplate.Triggers> 
     </HierarchicalDataTemplate>  
    </Window.Resources> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <CheckBox x:Name="chk">Mask some items</CheckBox> 

     <TreeView Grid.Row="1" x:Name="trv" ItemTemplate="{StaticResource HDT_items}" /> 
    </Grid> 
</Window> 

我想,當複選框被選中,不顯示錯誤= false的節點,但不更改數據源。這是可能的,以及如何?

回答

0

將TreeElement.Children的類型從List更改爲ObservableCollecton。而不是在視圖中隱藏項目,只需從ViewModel中的基礎集合中移除tme即可。

+0

是的,謝謝,它可以與重建底層集合的函數一起使用。 – Gulix 2009-09-22 12:22:15