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

时间:2011-02-18 10:17:50

标签: 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 _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<AOI>的{​​{1}}中。在ListBox的{​​{1}}事件中,我将所选对象分配给SelectedValueChanged,以便用户可以修改ListBox

除了名称字段(显示在PropertyGrid中(参见上面的AOI)之外,此方法正常。

当我使用ListBox修改名称字段时,ToString()已正确更新。但是在PropertyGrid中,只要我按下输入,ListBox字段(只是值)就会被清除。当我将光标设置为PropertyGrid,中的另一个字段时,会出现正确的(修改的)值。

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

1 个答案:

答案 0 :(得分:0)

这是PropertyGrid的一个问题。

这也可以在Visual Studio中与设计器一起复制。只需选择一个控件并将其最小尺寸更改为比当前尺寸更大的值。如果您查看网格,则只要在网格中选择它,就不会更新size属性中的值。

如果某些行无法正常更新,通常这两个选项中的一个会有所帮助:

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