Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据绑定Listbox和PropertyGrid的更新问题_C#_Listbox_Propertygrid - Fatal编程技术网

C# 数据绑定Listbox和PropertyGrid的更新问题

C# 数据绑定Listbox和PropertyGrid的更新问题,c#,listbox,propertygrid,C#,Listbox,Propertygrid,这是我AOI课程的一部分,没有什么特别之处: class AOI : INotifyPropertyChanged { private Guid _id; private string _name; private string _comment; public Guid Id { get { return _id; } } public string Name { get { return _n

这是我AOI课程的一部分,没有什么特别之处:

class AOI : INotifyPropertyChanged
{
    private Guid _id;
    private string _name;
    private string _comment;

    public Guid Id
    {
        get { return _id; }
    }

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public string Comment
    {
        get { return _comment; }
        set
        {
            _comment = value;
            OnPropertyChanged("Comment");
        }
    }

    public override string ToString()
    {
        if (_name.Length > 0)
        {
            return _name;
        }
        else
        {
            return _id.ToString();
        }
    }

}
我将它们保存在绑定到列表框的BindingList中。在列表框的SelectedValueChanged事件中,我将所选对象分配给PropertyGrid,以便用户可以修改AOI

除了显示在列表框中的名称字段外,这一切正常。请参见上面的ToString

当我使用PropertyGrid编辑name字段时,列表框会正确更新。但是在PropertyGrid中,只要我按enter键,名称字段中的值就会被清除。将光标设置到PropertyGrid中的另一个字段时,将显示正确的修改值


正确处理此问题的最简单解决方法是什么?

这是PropertyGrid的问题

这也可以在VisualStudio中与设计师一起复制。只需选择一个控件并将其最小大小更改为比当前控件更大的值。如果查看网格,“大小”属性中的值只有在网格中选择后才会更新

如果某些行无法正常更新,以下两个选项之一将有所帮助:

通过调用PropertyGrid.SelectedObject=myObject将对象重新附加到PropertyGrid 通过调用propertyGrid.Invalidate强制网格重新绘制自身