在特定条件下删除 GridViewColumn 成员

Strikethrough GridViewColumn Member Under Certain Condition

我有一个列出文件路径的 GridViewColumn。我有一个文件观察器,如果文件被移出监视目录,我想删除我 GridViewColumn.

中的文件路径

这是我的 XAML GridViewColumn:

<GridViewColumn x:Name="FileNameHeader" Header="File Name" DisplayMemberBinding="{Binding filename}" />

我可以将 属性 添加到包含 filename 的结构中,例如 FileExists() 如果文件丢失,它将 return false。然后,我只需要一种方法来设置删除线文本。我可以使用某种样式吗?

您可以添加类型为 bool 的 属性,例如Exists 到您的文件结构以指示文件是否存在。别忘了implement INotifyPropertyChanged so that changes to the property are reflected in the user interface. In the following, I assume that your file structure is a class called FileData. Make sure to change it to the real name in your project. I changed the property name filename to Filename. It is a good practice to adhere to common naming guidelines, see Capitalization Conventions参考。

为了对文本应用删除线,您需要创建自定义 CellTemplate,因为没有直接的方法来设置列的样式。在 DataTemplate you create a TextBlock to display the Filename. Add a style to the TextBlock with a DataTrigger that sets the Strikethrough 文本修饰取决于 Exists 属性 你的文件结构。

<GridViewColumn x:Name="FileNameHeader" Header="File Name">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="{x:Type local:FileData}">
            <TextBlock Text="{Binding Filename}">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Exists}" Value="False">
                                <Setter Property="TextDecorations" Value="Strikethrough"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

您不一定需要设置 DataType,但它有助于在编辑器中自动完成。