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

时间:2011-08-01 08:53:31

标签: wpf binding mvvm-light wpfdatagrid

我正在研究WPF MVVM应用程序。我想要在绑定到我的数据网格的集合发生变化时触发某种事件。

Ex: - 我的数据网格项源是ObservableCollection UserList

我希望当我清除UserList集合时,某些事件会触发datagrid来通知自己。我已经尝试过datagrid的这个事件DataContextChanged,但它没有帮助。

请指导

由于

4 个答案:

答案 0 :(得分:1)

如果您遵循MVVM模式,则不需要处理UI事件。您的对象集合是ViewModel的一部分,因此您应该在ViewModel上添加一个PropertyChanged事件,该事件在更改集合时触发。

答案 1 :(得分:0)

如果您使用的是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);
            }
        }
    }

在setter部分中,您可以调用视图模型中的任何方法,如果您使用的是代码,那么您不使用MVVM模式

答案 2 :(得分:0)

如果您希望在对集合的引用发生更改时触发事件,那么您应该在Rumplin演示的ViewModel中使用和OnPropertyChanged事件。但是,如果您想知道何时将User添加到集合中或从集合中删除,则需要在ObservableCollection上为CollectionChanged事件添加处理程序。

答案 3 :(得分:0)

您正在寻找的事件是CollectionChanged

您(以及其他尝试做同样事情的人)的混淆源是您认为当集合发生变化时,数据网格的来源已经发生变化。不是这样。数据网格的ItemsSource仍然是集合 - 您尚未将其分配给其他集合或清除它。因此PropertyChangedDataContextChanged没有被提升,处理它们在这里没有任何效果。

请注意,CollectionChanged非常复杂,因为很多事情构成了对集合的更改,因此您需要非常彻底地理解它才能正确处理它。我怀疑你并不是真的需要处理它 - 你正试图通过绑定来做更好的事情。