Поднять событие в WPF DataGrid при изменении источника данных - PullRequest
0 голосов
/ 01 августа 2011

Я работаю над приложением WPF MVVM.Я хочу, чтобы какое-то событие происходило при изменении коллекции, связанной с моей сеткой данных.

Пример: - Мой источник элемента сетки данных - ObservableCollection UserList

Я хочу, чтобы при очистке коллекции UserList некоторыесобытие срабатывает на датагрид, чтобы уведомить себя.Я пытался это событие DataContextChanged of datagrid, но это не помогло.

Пожалуйста, руководство

Спасибо

Ответы [ 4 ]

1 голос
/ 01 августа 2011

Если вы следуете шаблону MVVM, вам не нужно обрабатывать события пользовательского интерфейса. Ваша коллекция объектов является частью вашей ViewModel, поэтому вы должны добавить событие PropertyChanged в вашу ViewModel, которое срабатывает при изменении коллекции.

0 голосов
/ 01 августа 2011

Событие, которое вы ищете: CollectionChanged.

Источником недоумения для вас (и других, кто пытается сделать то же самое) является то, что вы думаете, что когда коллекция изменится,источник вашей сетки данных изменился.Не так.ItemsSource сетки данных по-прежнему является коллекцией - вы не присвоили ее другой коллекции или не очистили ее.Так что PropertyChanged и DataContextChanged не поднимаются, и обработка их здесь не имеет никакого эффекта.

Обратите внимание, что CollectionChanged довольно сложный процесс, потому что многие вещи представляют собой изменения в коллекции, поэтому вы 'Вам нужно понять это довольно тщательно, чтобы справиться с этим правильно.Я подозреваю, что вам на самом деле не нужно справляться с этим - что вы пытаетесь что-то сделать с событиями, которые лучше сделать через связывание.

0 голосов
/ 01 августа 2011

Если вы хотите событие, которое срабатывает при изменении ссылки на коллекцию, вы должны использовать и событие OnPropertyChanged в вашей ViewModel, как продемонстрировал Rumplin. Однако, если вы хотите знать, когда пользователь добавляется в коллекцию или удаляется из коллекции, вам необходимо добавить обработчик для события CollectionChanged в ObservableCollection.

0 голосов
/ 01 августа 2011

Если вы используете 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);
            }
        }
    }

И в установочной части вы можете вызвать любой метод в модели представления, если вы используете код позади, то выне используется шаблон MVVM

...