Когда список, лежащий в основе моей базы данных DXGrid, обновляется, полоса прокрутки сетки обновляется, но тело сетки не обновляется, по крайней мере, не сразу. Как только я нажимаю на полосу прокрутки сетки, тело обновляется.
Для иллюстрации - вот мое заявление в исходном состоянии:
Когда я добавляю четыре новых объекта в свой базовый список, меняется только полоса прокрутки:
Наконец, когда я нажимаю кнопку «вниз» внизу полосы прокрутки, вся сетка обновляется:
Ожидаемое поведение: сетка должна корректно обновляться всякий раз, когда обновляется базовый список баз данных, не намного позже, когда пользователь пытается взаимодействовать со списком.
Xaml для моего GridControl выглядит так:
<dxg:GridControl dxlc:DockLayoutControl.Dock="Client"
ItemsSource="{Binding Project.TimeSeries}">
<dxg:GridControl.Columns>
... omitted ...
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Name="tableView1"
AllowEditing="False"
AllowColumnFiltering="True"
ShowAutoFilterRow="True"
ShowGroupPanel="False"
FocusedRow="{Binding SelectedTimeSeries, Mode=TwoWay}"/>
</dxg:GridControl.View>
</dxg:GridControl>
DataContext
формы имеет значение TimeSeriesPresenter
:
public class TimeSeriesPresenter : ITimeSeriesPresenter
{
public TimeSeriesPresenter(ITimeSeriesVisual view)
: base(view) { ... }
public BuilderProject Project
{ get { ... } set { ... } }
public TimeSeriesDefinition SelectedTimeSeries
{ get { ... } set { ... } }
и BuilderProject
выглядит так:
public class BuilderProject : ViewModelBase
{
public IList<TimeSeriesDefinition> TimeSeries
{ get { ... } }
...
}
Оба эти объекта реализуют INotifyPropertyChanged
, и свойства правильно запускают событие PropertyChanged
. Итак, все должно просто работать, верно?
Очевидно, что DXGrid получает какое-то обновление от модели представления, потому что полоса прокрутки изменяется. Но почему он не перекрашивается полностью?
Существует ли какой-то "режим", необходимый для DXGrid, чтобы нормально выполнять привязку данных?
Чего мне не хватает?
Обновление
Все мои объекты данных наследуются от ViewModelBase
, который реализует интерфейс INotifyPropertyChanged
. В дополнение к TimeSeriesPresenter
и BuilderProject
(показано выше), вот сводка TimeSeriesDefinition
:
public class TimeSeriesDefinition : ViewModelBase
{
public string SeriesID
{
get { return mSeries; }
set {
if (!Equals(mSeries, value) {
mSeries = value;
OnPropertyChanged("SeriesID");
}
}
}
... etc ...
}