数据源更改时引发WPF DataGrid上的事件
我正在开发一个WPF MVVM应用程序。我希望在绑定到我的datagrid的集合更改时触发某种类型的事件 示例:-我的datagrid项源是ObservableCollection UserList 我希望在清除UserList集合时,datagrid上会触发一些事件来通知自己。我尝试了datagrid的DataContextChanged事件,但没有帮助 请引导数据源更改时引发WPF DataGrid上的事件,wpf,binding,mvvm-light,wpfdatagrid,Wpf,Binding,Mvvm Light,Wpfdatagrid,我正在开发一个WPF MVVM应用程序。我希望在绑定到我的datagrid的集合更改时触发某种类型的事件 示例:-我的datagrid项源是ObservableCollection UserList 我希望在清除UserList集合时,datagrid上会触发一些事件来通知自己。我尝试了datagrid的DataContextChanged事件,但没有帮助 请引导 谢谢如果您遵循MVVM模式,则不需要处理UI事件。对象集合是ViewModel的一部分,因此您应该在ViewModel上添加一个Pr
谢谢如果您遵循MVVM模式,则不需要处理UI事件。对象集合是ViewModel的一部分,因此您应该在ViewModel上添加一个PropertyChanged事件,该事件在集合更改时触发。如果您使用的是MVVM,那么您就有这样一个属性
/// <summary>
/// The <see cref="UserList" /> property's name.
/// </summary>
public const string UserListPropertyName = "UserList";
private ObservableCollection<UserList> _userList = new ObservableCollection<UserList>();
public ObservableCollection<UserList> UserList
{
get
{
return _userList;
}
set
{
if (_userList != value)
{
_userList = value;
RaisePropertyChanged(UserListPropertyName);
}
}
}
//
///该属性的名称。
///
public const string UserListPropertyName=“UserList”;
private observeCollection_userList=new observeCollection();
公共ObservableCollection用户列表
{
得到
{
返回用户列表;
}
设置
{
if(_userList!=值)
{
_用户列表=值;
RaisePropertyChanged(UserListPropertyName);
}
}
}
在setter部分,您可以调用视图模型中的任何方法,如果您使用的是代码隐藏,那么您就没有使用MVVM模式。如果您希望在集合引用更改时触发事件,那么您应该在视图模型中使用And OnPropertyChanged事件,正如Rumplin所演示的那样。但是,如果您想知道用户何时添加到集合或何时从集合中删除,则需要在ObservableCollection上添加CollectionChanged事件的处理程序。您要查找的事件是
CollectionChanged
让您(以及其他尝试做同样事情的人)感到困惑的一个原因是,您认为当集合发生变化时,数据网格的来源也发生了变化。不是这样。数据网格的ItemsSource
仍然是集合-您没有将其分配给其他集合,也没有清除它。因此,PropertyChanged
和DataContextChanged
没有被引发,处理它们在这里没有效果
请注意,
CollectionChanged
非常复杂,因为很多东西构成了对集合的更改,所以您需要非常彻底地理解它才能正确地处理它。我怀疑您真的不需要处理它—您正在尝试处理事件,而这些事件可以通过绑定更好地完成。是的,没错。但出于某种原因,我想将该事件处理到GUI,是否有其他方法可以这样做,每当datagrid的源发生更改时,我都会收到通知。使用绑定而不是隐藏在itemsource设置后面的代码。但此事件在视图模型上激发,实际上grid是我的扩展用户控件,我想在用户控件端处理此事件。ex:-修改集合时,将索引设置为0,或者如果集合中没有任何记录,则将cansort列设置为false等