数据源更改时引发WPF DataGrid上的事件

数据源更改时引发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

我正在开发一个WPF MVVM应用程序。我希望在绑定到我的datagrid的集合更改时触发某种类型的事件

示例:-我的datagrid项源是ObservableCollection UserList

我希望在清除UserList集合时,datagrid上会触发一些事件来通知自己。我尝试了datagrid的DataContextChanged事件,但没有帮助

请引导


谢谢

如果您遵循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等