如何刷新MVVM(WPF)中的Devexpress GridControl ItemsSource(作为Datatable)

时间:2016-10-26 06:24:39

标签: c# wpf mvvm devexpress gridcontrol

我在视图中有一个GridControl(Devexpress v13)(WPF)。 数据表在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));
            }
        }

2 个答案:

答案 0 :(得分:0)

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;

答案 1 :(得分:0)

我找到了问题的原因。 我正在使用封装,我设置了私有值(_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");