当我的数据库DXGrid下面的列表被更新时,网格的滚动条会更新,但是网格的主体不会更新,至少不会马上更新。一旦我单击网格滚动条,主体就会刷新。
为了说明-下面是我在初始状态下的应用程序:

当我向基础列表中添加四个新对象时,只有滚动条更改:

最后,当我按下滚动条底部的"down“按钮时,整个网格刷新:

预期行为:每当更新基础数据库列表时,网格都应该正确刷新,而不是稍后用户试图与列表交互时。
用于我的GridControl的Xaml如下所示:
<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是否需要某种“模式”才能正常执行DataBinding?我遗漏了什么?
更新
我的所有数据对象都是从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 ...
}发布于 2011-09-05 20:22:19
问题的根源是这样的代码:
public class BuilderProject : ViewModelBase
{
public IList<TimeSeriesDefinition> TimeSeries
{ get { ... } }
...
}尽管应该支持IList<T>,但实际上它并不支持。
必要的解决方法是改为使用ObservableCollection<T>:
public class BuilderProject : ViewModelBase
{
public ObservableCollection<TimeSeriesDefinition> TimeSeries
{ get { ... } }
...
}在我的例子中,这导致了两个列表的并行维护--表示不可知论模型中的底层IList<>和ViewModel中的ObservableCollection<>。保持两个列表保持同步是有点开销,但并不难做到。
发布于 2011-06-30 15:44:52
让我补充一些补充资料。您告诉过ViewModel和DataSource实现了INotifyPropertyChanged接口。我的假设正确吗?数据对象没有实现这个接口吗?如果是这样的话,我倾向于认为这就是这个问题的原因。
如果数据对象类(TimeSeriesDefinition ?)实现这个接口,一切都应该正常工作。
此外,造成此问题的一个可能原因是您正在绑定到一个复杂的fieldName,即
FieldName="Row.Text“
如果是这样的话,请告诉我,我们会让你知道如何解决这个问题。
https://stackoverflow.com/questions/6529769
复制相似问题