加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 隐藏WPF Datagrid中新行的单元格

发布时间:2020-12-15 08:30:38 所属栏目:百科 来源:网络整理
导读:我有一个 WPF Datagrid,它有一个模板列,如下所示: DataGridTemplateColumn x:Name="ciDelete" Header="Delete" DataGridTemplateColumn.CellTemplate DataTemplate Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Cl
我有一个 WPF Datagrid,它有一个模板列,如下所示:
<DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center">
                <Image Source="Resources/16x16/delete.png" Stretch="Fill" />
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这显示并且效果很好.但是,按钮会在行中显示新项目(如下所示).由于这是一个删除按钮,我不希望它显示在“新项目”行上.

我看过this关于造型新行的文章,但这看起来有点极端.我很好奇是否有一个更简单的方法只隐藏“新行”上的按钮.谢谢您的帮助.

解决方法

如果是我,我会写一个快速转换器来确定DataGridRow的datacontext是否是NewItemPlaceholder:
public class IsNamedObjectVisibilityConverter : IValueConverter
{

    public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
        if (value.GetType().Name == "NamedObject")
        {
            return Visibility.Hidden;
        }
        else
        {
            return Visibility.Visible;
        }

    }

    public object ConvertBack(object value,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

}

然后我将一个RelativeSource绑定添加到删除按钮可见性:

<DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center"
                 Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGridRow},Path=DataContext,Converter={StaticResource IsNamedObjectVisibilityConverter}}">
                <Image Source="Resources/16x16/delete.png" Stretch="Fill" />
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这可能是也可能不是最好的方法,但应该有效.

我希望这有帮助.

编辑:我希望很明显,为了简洁起见,我跳过了创建所述转换器实例的部分.此示例假定您具有类的确切名称的Converter实例.可能很明显,但值得一提.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读