单击时WPF Datagrid单元格为空,如果失去焦点,则为默认值

单击时WPF Datagrid单元格为空,如果失去焦点,则为默认值,wpf,datagrid,Wpf,Datagrid,我有一个WPF数据网格,它使用绑定到对象列表。该对象有一个名称属性,用户应该能够更改该属性,默认值为“在此处添加名称” 我需要实现的行为是:当用户单击单元格时清除单元格,然后如果用户将其保留为空,则返回默认值 我有一个功能,允许用户单击编辑,这可以很好地清除单元格(下面的部分代码)。如果单元格失去焦点,我不能将“addname here”文本返回到单元格中 我觉得我已经尝试了在谷歌上能找到的一切。我尝试过验证程序,如果value==null,我会设置value=“addname here”,但这

我有一个WPF数据网格,它使用绑定到对象列表。该对象有一个名称属性,用户应该能够更改该属性,默认值为“在此处添加名称”

我需要实现的行为是:当用户单击单元格时清除单元格,然后如果用户将其保留为空,则返回默认值

我有一个功能,允许用户单击编辑,这可以很好地清除单元格(下面的部分代码)。如果单元格失去焦点,我不能将“addname here”文本返回到单元格中

我觉得我已经尝试了在谷歌上能找到的一切。我尝试过验证程序,如果value==null,我会设置value=“addname here”,但这不起作用。此外,下面代码的某些内容会阻止验证器工作,即使在应用默认红色边框时也是如此(我熟悉验证器,它们在我代码的其他部分也能成功工作)

我尝试使用TargetNullValue,但这不允许单元格在任何时候都为空,我确实希望最初单击单元格时单元格为空。有什么想法吗

    //Allows user to click on "Name" field once to edit
    private void SingleClickEdit(object sender, MouseButtonEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;
        DataGridCellInfo cellInfo = new DataGridCellInfo(cell);

        System.Reflection.PropertyInfo pi = cellInfo.Item.GetType().GetProperty("controllerName");

        if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
        {
            if (!cell.IsFocused)
            {
                cell.Focus();

                if (pi != null)
                {
                    pi.SetValue(cellInfo.Item, null);
                }

不。不,不,不。你完全搞错了。首先,有很多可用的免费控件库,其中包括带有水印的文本框(顺便说一句,这就是您试图做的,将水印添加到文本框)。但是,如果你想自己动手,那你就大错特错了。这里有一个问题和一个解决方案解决方案不是试图操纵数据,解决方案是在没有数据时更改视图。^^fwiw。。。我最喜欢的解决方案是Will提供的链接上的第三个答案(apc的答案)。非常简单,而且只有xaml。@Gordon True这就是我所看到的。对于一件小事来说,其他的都是荒谬的代码量。