【问题标题】:How to refresh Devexpress GridControl ItemsSource(as Datatable) in MVVM(WPF)如何在 MVVM(WPF) 中刷新 Devexpress GridControl ItemsSource(as Datatable)
【发布时间】:2016-10-26 06:24:38
【问题描述】:

我在视图 (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));
            }
        }

【问题讨论】:

    标签: c# wpf mvvm devexpress gridcontrol


    【解决方案1】:
    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;
    

    【讨论】:

    • 我正在使用属性更改事件,但它不刷新
    • 这不是问题。在我的代码中将 ObservableCollection 更改为 DataTable。
    • Notify("DtCriterias") - 检查这个
    • 我找到了问题的原因并回答了这个问题。感谢您的建议@Bofort
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2016-06-15
      • 2015-12-02
      相关资源
      最近更新 更多