如何在 MVVM(WPF) 中刷新 Devexpress GridControl ItemsSource(作为数据表)
How to refresh Devexpress GridControl ItemsSource(as Datatable) in MVVM(WPF)
我在视图 (WPF) 中有一个 GridControl(Devexpress v13)。 Datatable 在 ViewModel 中设置值并分配给 ItemsSource。但是 ItemsSource 只填充了初始化。后来 Datatable 的值发生变化但不刷新。
ItemsSource如何刷新?
<dxg:GridControl Name="GridControlData" DataSource="{Binding DtCriterias, Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Top" AutoGenerateColumns="AddNew" Width="400" Height="100">
我希望你明白我的意思。
任何帮助将不胜感激。
提前致谢。
编辑:
属性 更改为:
public DataTable DtCriterias {
get { return _dtCriterias; }
set
{
_dtCriterias = value;
Notify(() => DtCriterias);
}
}
protected void Notify(Expression<Func<object>> expression)
{
if (_propertyChangedEvent == null) return;
Notify(GetPropertyName(expression));
}
protected void Notify(string propertyName)
{
if (_propertyChangedEvent != null)
{
_propertyChangedEvent(this, new PropertyChangedEventArgs(propertyName));
}
}
public ObservableCollection<ClientB2B> Clients
{
get
{
return _clients;
}
set
{
if (_clients == value) return;
_clients = value;
OnPropertyChanged(); // This is what you need
}
}
实现这个接口 - INotifyPropertyChanged
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
我找到了问题的原因。
我正在使用封装并且设置了私有值 (_dtCriterias)。因此 属性 更改事件无效。
定义:
private DataTable _dtCriterias;
public DataTable DtCriterias {
get { return _dtCriterias; }
set
{
_dtCriterias = value;
Notify(() => DtCriterias);
}
}
当我设置了问题数据表时:
_dtCriterias = GetValue().DefaultView.ToTable("FooTable");
解决方案:
DtCriterias = GetValue().DefaultView.ToTable("FooTable");
我在视图 (WPF) 中有一个 GridControl(Devexpress v13)。 Datatable 在 ViewModel 中设置值并分配给 ItemsSource。但是 ItemsSource 只填充了初始化。后来 Datatable 的值发生变化但不刷新。 ItemsSource如何刷新?
<dxg:GridControl Name="GridControlData" DataSource="{Binding DtCriterias, Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Top" AutoGenerateColumns="AddNew" Width="400" Height="100">
我希望你明白我的意思。 任何帮助将不胜感激。
提前致谢。
编辑: 属性 更改为:
public DataTable DtCriterias {
get { return _dtCriterias; }
set
{
_dtCriterias = value;
Notify(() => DtCriterias);
}
}
protected void Notify(Expression<Func<object>> expression)
{
if (_propertyChangedEvent == null) return;
Notify(GetPropertyName(expression));
}
protected void Notify(string propertyName)
{
if (_propertyChangedEvent != null)
{
_propertyChangedEvent(this, new PropertyChangedEventArgs(propertyName));
}
}
public ObservableCollection<ClientB2B> Clients
{
get
{
return _clients;
}
set
{
if (_clients == value) return;
_clients = value;
OnPropertyChanged(); // This is what you need
}
}
实现这个接口 - INotifyPropertyChanged
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
我找到了问题的原因。 我正在使用封装并且设置了私有值 (_dtCriterias)。因此 属性 更改事件无效。
定义:
private DataTable _dtCriterias;
public DataTable DtCriterias {
get { return _dtCriterias; }
set
{
_dtCriterias = value;
Notify(() => DtCriterias);
}
}
当我设置了问题数据表时:
_dtCriterias = GetValue().DefaultView.ToTable("FooTable");
解决方案:
DtCriterias = GetValue().DefaultView.ToTable("FooTable");