Обновление проблемы с привязкой к данным Listbox и PropertyGrid - PullRequest
1 голос
/ 18 февраля 2011

Это часть моего класса 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>, который связан с ListBox. В событии SelectedValueChanged ListBox я назначаю выбранный объект PropertyGrid, чтобы пользователь мог изменить AOI.

Это работает нормально, за исключением поля Имя (которое отображается в ListBox (см. ToString() выше)).

Когда я редактирую поле имени с помощью PropertyGrid, ListBox обновляется правильно. Но в PropertyGrid, поле Name (только значение) очищается, как только я нажимаю клавишу ввода. Правильное (измененное) значение появляется, когда я устанавливаю курсор на другое поле в PropertyGrid.

Какой самый простой способ решить эту проблему правильно?

1 Ответ

0 голосов
/ 18 февраля 2011

Это проблема PropertyGrid.

Это также может быть воспроизведено с конструктором в Visual Studio.Просто выберите элемент управления и измените его минимальный размер на большее значение, чем текущее.Если вы посмотрите на сетку, значение в свойстве size не будет обновлено, пока вы не выберете его в сетке.

Если некоторые строки не будут корректно обновляться, обычно один из этих двух вариантов поможет:

  • Повторно присоедините объект к PropertyGrid, вызвав propertyGrid.SelectedObject = myObject
  • Принудительно перерисовать сетку, вызвав propertyGrid.Invalidate()
...