2013-05-29 31 views
2

我在我的WPF應用程序中有一個TreeView。在運行時,我將數據綁定到Treeview。樹視圖中的每個節點都與路徑關聯。我應該改變TreeView元素的顏色如果與元素相關聯的路徑中的文件有錯誤。假設我需要將其更改爲RED。在WPF中加載Treeview事件後

因此,由於我在treeview完全加載完成後將其綁定,因此我應該再次遍歷樹,並且我應該檢查路徑是否包含TreeView中每個元素的任何錯誤。

如何從父對象到子對象的孩子逐個導航整個樹元素,並對每個節點執行錯誤檢查操作。

樹在XAML:

<TreeView Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Name="treeView1" 
        VerticalAlignment="Stretch" 
        SelectedItemChanged="treeView1_SelectedItemChanged" HorizontalContentAlignment="Stretch" 
        VerticalContentAlignment="Top" BorderThickness="0,0,0,1" BorderBrush="LightGray"> 

       <TreeViewItem Header="Head Tree" ItemsSource="{Binding MainComps}"> 
        <TreeViewItem.ItemContainerStyle> 
         <Style TargetType="{x:Type TreeViewItem}"> 
          <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
          <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
          <Setter Property="FontWeight" Value="Normal" /> 
          <Style.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="FontWeight" Value="Bold" /> 
           </Trigger> 
           <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
            <Setter Property="Foreground" Value="RED" /> 
           </DataTrigger> 
          </Style.Triggers> 

         </Style> 
        </TreeViewItem.ItemContainerStyle> 
        <TreeViewItem.Resources> 
         <HierarchicalDataTemplate DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Head Tree" /> 
          </StackPanel> 
         </HierarchicalDataTemplate> 
         <HierarchicalDataTemplate DataType="{x:Type local:MainCompViewModel}" ItemsSource="{Binding Children}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Maincompname}" /> 
          </StackPanel> 
         </HierarchicalDataTemplate> 
         <HierarchicalDataTemplate DataType="{x:Type local:FeatureViewModel}" ItemsSource="{Binding Children}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding FeatureName}" /> 
          </StackPanel> 
         </HierarchicalDataTemplate> 
         <DataTemplate DataType="{x:Type local:CompViewModel}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Component}" /> 
          </StackPanel> 
         </DataTemplate> 

        </TreeViewItem.Resources> 

       </TreeViewItem> 
      </TreeView> 

在後面的代碼:

我有樹狀選擇更改事件。 我如何擁有AfterTreeViewLoaded事件。像這樣的東西。

Void TreeviewLoaded() 
{ 
//Identify error. Change the color 
} 

在此先感謝..

回答

2

當你創建你應該有根的項目清單部分和清單綁定到TreeView.ItemsSource樹項目。

然後在任何時候您都可以檢查路徑並設置布爾值HasError(該屬性應該存在於您的ItemViewModel中)。樹項目的底色可以通過風格的改變,像這樣:

<Setter Property="Background" Value="{Binding HasError, Converter={StaticResource HasErrorToBackroundConverter}" /> 

UPD:

請參閱下面的文章http://blog.clauskonrad.net/2011/04/how-to-make-hierarchical-treeview.html

您的ItemViewModel就像文章中的Folder一樣。 根項目列表是m_folders。與Folder包含FullPath一樣,您的ItemViewModel將包含Path以及HasError屬性。

當您需要檢查路徑時,您遞歸地通過m_folders,從中讀取路徑,檢查它並設置HasError

+0

要檢查是否有錯誤,我需要將Path作爲參數傳遞。我怎樣才能做到這一點? – BinaryMee

+0

@CMB,更新了答案 –