c# - WPF 中的 Treeview 加载事件之后

标签 c# wpf treeview

我有一个TreeView在我的 WPF 应用程序中。在运行时我将数据绑定(bind)到 Treeview 。 TreeView 中的每个节点都与路径相关联。如果与元素关联的路径中的文件有错误,我应该更改 TreeView 元素的颜色。假设我需要将其更改为红色。

所以,因为我在 treeview 之后动态绑定(bind)它已完全加载,我应该再次遍历树,并且应该检查路径是否包含 TreeView 中每个元素的任何错误。 .

如何将整个 Tree 元素从父元素到根子元素一一导航,并对每个节点执行错误检查操作。

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>

在代码后面:

我有 TreeView 选择更改事件。 我怎样才能有 AfterTreeViewLoaded 事件。像这样的东西。

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

提前致谢..

最佳答案

当您创建树项目时,您应该有一些根项目列表并将该列表绑定(bind)到 TreeView.ItemsSource。

然后您可以随时检查路径并设置 bool 值 HasError (该属性应该存在于您的 ItemViewModel 中)。树项目的背景可以通过样式更改,如下所示:

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

更新:

请参阅以下文章http://blog.clauskonrad.net/2011/04/how-to-make-hierarchical-treeview.html

您的ItemViewModel 就像文章中的Folder 一样。 根项目列表是m_folders。就像 Folder 包含 FullPath 一样,您的 ItemViewModel 将包含 Path 以及 HasError 属性.

当您需要检查路径时,您递归地传递m_folders,从中读取路径,检查它并设置HasError

关于c# - WPF 中的 Treeview 加载事件之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16807082/

相关文章:

wpf - MVVMLight-- 将参数传递给 ViewModel 构造函数?

c# - 双击可编辑的 TreeViewItem

c# - 选择后更改 TreeViewItem 的前景

c# - 在 RichTextBox 中打开 TreeView 中选定的文件

c# - Entity Framework 不将 Where 子句作为 WHERE 子句发送到 SQL Server

.net - 如何获得图像中的多数颜色?

c# - 在 Entity Framework 中删除之前更新

WPF 工具包 : how to scroll datagrid to show selected item from code behind?

c# - 从另一个程序读取标准输出

c# - 动态声明 Func<in T, out Result>