我的数据网格未清除且不刷新
本文关键字:刷新 清除 数据 数据网 网格 我的 | 更新日期: 2023-09-27 18:31:53
>我有两个DataGrid,每个绑定在一个数据源中,如下所示:
ItemsSource="{Binding Data, ElementName=EmpSource, Mode=TwoWay}"
第一个DataGrid(dgJob)包含Job
,第二个(dgEmp)包含链接到job
的employee
。
我想将所有员工保留在 EmpSource 中,并在 dataGrid 中仅显示那些链接到我的第一个数据网格中所选作业的员工。
所以我在 dgJob 选择更改事件中这样做:
dgEmp.ItemsSource = null;
var lstEmp = EmpSource.DataView.OfType<Emp>().Where(ores => ores.IdJob == itmJobSelect.IdJob).ToList();
dgEmp.ItemsSource = lstEmp;
问题是,当我使用作业更改数据网格中的选定行时,dataGrid 没有清除,因此对于每个作业,我都会显示 dgEmp 中的每个员工,而我应该只显示与作业相关的员工。
我可以删除 xaml 中确定数据源的行,但如果这样做,则必须在数据源发生更改时刷新 dataGrid。
但是我没有找到如何刷新它(至少是第一次),除非我每次在数据源更改后都写 3 行。
有人可以帮助我找到解决问题的方法吗?
谢谢。
我建议您使用 MVVM 设计模式。您应该在视图模型类中加载数据并将其存储在实现 INotifyCollectionChanged 接口的集合中。视图模型还应实现 INotifyPropertyChanged 接口。
当员工集合发生更改时,应按以下代码筛选第二个集合:
Jobs.CollectionChanged += (sender, args) =>
{
Employees = AllEmployees.Where(c=> c.IdJob == SelectedJob.IdJob);
}
当 SelectedJob 更改并且 DataGrid 将刷新时,您也应该执行相同的操作。
仅当已实现属性更改通知并指定了正确的绑定时,此操作才有效。
下面是您应该编写的属性更改实现的示例:
public class ViewModel : INotifyPropertyChanged
{
public IEnumerable<Emp> Employees
{
get { return _employees; }
set
{
if (_employees != value)
{
_employees = value;
OnPropertyChanged("Employees");
}
}
}
/* ... */
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
还应将视图模型实例分配给 DataContext,以使绑定正常工作。例如,在文件构造函数后面的代码中:
public void Page()
{
DataContext = new ViewModel();
InitializeComponent();
}