我正在使用WPF DataGrid来显示例如实例的列表。我在应用程序生命周期中存储的类Animal
(比如我在我的列表中添加/删除动物)在我的主窗口的属性中
public List<Animal> _animals
public class Animal {
public int ID { get; set; }
public strng name { get; set; }
}
我将DataGrid
添加到我的XAML中
<DataGrid Name="AnimalGrid"></DataGrid>
然后在初始化窗口时将其链接到函数LoadAnimals()
:
AnimalGrid.ItemsSource = LoadAnimals();
public List<Animal> LoadAnimals() {
return _animals;
}
我想要数据网格更新/刷新。更确切地说,我几乎只希望数据网格再次调用LoadAnimal
函数。我尝试了AnimalGrid.Items.Refresh()
,但它不起作用。
有什么建议吗?
答案 0 :(得分:2)
WPF绑定不能单独使用魔法,代码以某种方式需要发出正确的事件以供数据网格更新。
要更新以响应集合中的更改(添加/删除),请使用ObservableCollection<Animal>
作为ItemsSource
,这将触发正确的事件以在集合更改时更新数据网格。
如果您希望网格响应各行的INotifyPropertyChanged
和Animal
属性中的更改,则还必须在ID
课程中实施name
。
此外,您的LoadAnimals()
函数似乎没有做任何事情,因为它只检查null然后在这种情况下返回null。关于MVVM的评论+1,从长远来看,最好将ItemsSource
绑定到类(视图模型)中的某个属性,而不是在后面的代码中设置它。
答案 1 :(得分:0)
如果您只是从集合中添加删除元素。然后,您可以使用ObservableCollection
如果要创建新集合或想要更新集合内对象的属性。实现INotifyPropertyChanged。