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
接口。