C# 激发查询时Datagrid未更新

C# 激发查询时Datagrid未更新,c#,wpf,datagrid,observablecollection,C#,Wpf,Datagrid,Observablecollection,因此,我的UserControl中有一个DataGrid。它被数据绑定到我的ViewModel中的一个可观察集合。ViewModel实现了INotifyPropertyChanged接口,并在视图中进行了适当连接 我认为: <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding ContributionCollection,

因此,我的
UserControl
中有一个
DataGrid
。它被数据绑定到我的ViewModel中的一个
可观察集合
。ViewModel实现了INotifyPropertyChanged接口,并在视图中进行了适当连接

我认为:

<DataGrid AutoGenerateColumns="False"
          EnableRowVirtualization="True"
          ItemsSource="{Binding ContributionCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

<!-- DataGrid rows -->

/>

/>
在ViewModel中:

    private ObservableCollection<contribution> _contributionCollection;
    public ObservableCollection<contribution> ContributionCollection
    {
        get
        {
            return _contributionCollection;
        }
        set
        {
            _contributionCollection= value;
            OnPropertyChanged("ContributionCollection");
        }
    }
private-observeCollection\u-contributionCollection;
公共可观测收集贡献收集
{
得到
{
返回-贡献集合;
}
设置
{
_贡献收集=价值;
关于已变更的财产(“分摊集合”);
}
}
这意味着什么呢;点击一个特定的按钮,一个查询就会触发数据库并返回一些结果。这些结果将显示在数据网格中

    // Fired by an ICommand Property
    public object Contributions_CommandExecute(object param)                                           
    {
        var queryContributions = context.contributions.Where(c => c.member == Member);
        return _contributionCollection = new ObservableCollection<contribution>(queryContributions);
    }
//由ICommand属性激发
public object CommandExecute(object参数)
{
var queryContributions=context.contributions.Where(c=>c.member==member);
return _contributionCollection=新的可观测集合(queryContributions);
}
但是数据网格总是空的。应用程序冻结了一段时间,这表明背景中发生了一些事情,但实际上视图中没有传达任何信息。事实上,只有当ViewModel构造函数在初始化时触发查询时,它才能正常工作。但在那之后,它就不会再开火了

知道我哪里出错了吗?

这行

return _contributionCollection = new ObservableCollection<contribution>(queryContributions);
这条线

return _contributionCollection = new ObservableCollection<contribution>(queryContributions);

您必须使用Dispatcher更新列表,以便不会像这样中断GUI:

Dispatcher.BeginInvoke(new Action(() => _contributionCollection = new ObservableCollection<contribution>(queryContributions)));
Dispatcher.BeginInvoke(新操作(()=>_contributionCollection=newobserveCollection(queryContributions));
我也有类似的问题:


您必须使用Dispatcher更新列表,这样您就不会像这样中断GUI:

Dispatcher.BeginInvoke(new Action(() => _contributionCollection = new ObservableCollection<contribution>(queryContributions)));
Dispatcher.BeginInvoke(新操作(()=>_contributionCollection=newobserveCollection(queryContributions));
我也有类似的问题:

查看

<DataGrid AutoGenerateColumns="False"
          EnableRowVirtualization="True"
          ItemsSource="{Binding ContributionCollection}">

<!-- DataGrid rows -->

/>

/>
视图模型

public void Contributions_CommandExecute(object param)                                           
    {
        ContributionCollection = new ObservableCollection<contribution>(context.contributions.Where(c => c.member == Member));
    }
public\u CommandExecute(对象参数)
{
ContributionCollection=新的ObservableCollection(context.contributions.Where(c=>c.member==member));
}
查看


/>
视图模型

public void Contributions_CommandExecute(object param)                                           
    {
        ContributionCollection = new ObservableCollection<contribution>(context.contributions.Where(c => c.member == Member));
    }
public\u CommandExecute(对象参数)
{
ContributionCollection=新的ObservableCollection(context.contributions.Where(c=>c.member==member));
}

非常感谢。除此之外,我还忘了添加
INotifyPropertyChanged
接口。非常感谢。除此之外,我还忘了添加
INotifyPropertyChanged
接口。