现在我有一个WPF DataGrid
,它显示从LINQ to Entity查询获得的列表。但这并不意味着如果我从我的数据库中删除某些内容,它将立即从DataGrid
中删除。我尝试了myGrid.Items.Refresh()
,但它只刷新了一个单元格。
我知道ObservableCollection
可以某种方式解决问题,但我不知道在哪里创建这样的集合和正确的方法,这样每当我创建/添加/修改数据库时,集合也会被修改。
答案 0 :(得分:1)
答案 1 :(得分:0)
您不需要通过代码与DataGrid进行交互。相反,将DataGrid的ItemsSource绑定到ObservableCollection并操纵集合。 DataGrid将自动更新。
看看这里:Bind ObservableCollection to a DataGrid after assigning new value
事实上,你会意识到在很多情况下(在我的情况下,95%的情况下),你不想给你的WPF控件赋予任何名字。如果您的代码不了解您的用户界面,从长远来看,它更容易维护。让您的UI知道通过数据绑定获取其信息的位置。并查看INotifyPropertyChanged或Dependency Properties以及DataContext。
<DataGrid ItemsSource="{Binding MyCollection}" />
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
ObservableCollection<object> myCollection = new ObservableCollection<object>();
public ObservableCollection<object> MyCollection
{
get
{
return myCollection;
}
set
{
myCollection = value;
// Call the Notification here. Using linq and reflection you could get it to look like this:
// NotifyPropertyChanged(() => MyCollection);
}
}
如果您实际上没有更改myCollection值,则不需要提供更改通知。修改集合时,ObservableCollection实际上提供了自己的更改。