Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Roman Mejtes
Есть еще вариант ListView, он более легковесный.
+1. Но автор молчит на предложение.
6 ноя 18, 19:12    [21725755]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20292
Petro123
на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.
Если ты не встречался с юзеркейсом, это не значит, что его не существует

К сообщению приложен файл. Размер - 2Kb
6 ноя 18, 19:14    [21725758]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Shocker.Pro
Есть мнение, что WPF
ОК. Пару лет понаблюдаем.
6 ноя 18, 19:14    [21725759]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20292


К сообщению приложен файл. Размер - 2Kb
6 ноя 18, 19:15    [21725760]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Eld Hasp
Так как "выловить" изменение ячейки до выхода из неё?
на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.
Допустим, пользователь отредактировал только одну только одну ячейку DataGrid (Изменил номер телефона, например). Больше ему ни чего менять не надо. Хочет сохранить. Но кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.
Конечно, можно сделать кнопку всегда активной. А сохранять только если были изменения. Можно сказать пользователю - "Сначала нажмите Enter" и т.д. Но интересно добиться всё таки желаемого. Хотя бы с познавательной точки зрения.
6 ноя 18, 19:17    [21725764]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Shocker.Pro
Если ты не встречался с юзеркейсом, это не значит, что его не существует
плохо видно к чему это.
Запись в табле это обычно сущность.
А сущность частями не сохраняется.
6 ноя 18, 19:18    [21725765]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Eld Hasp
Но кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.
не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.
6 ноя 18, 19:20    [21725768]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Roman Mejtes
Есть еще вариант ListView, он более легковесный.
+1. Но автор молчит на предложение.
Я не молчу, а обдумываю. Как быть с новой строкой? Просто явно её добавлять в коллекцию? Коллекцию настроить так, чтобы в ней всегда была одна пустая строка?
Кстати, читал такой вариант для DataGrid. Выловить событие начала редактирования новой строки (PreparingCellForEdit) и по нему явно создать в коллекции новую строку.
6 ноя 18, 19:21    [21725772]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Eld Hasp
Но кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.
не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.
До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.
6 ноя 18, 19:25    [21725777]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Eld Hasp
Petro123
пропущено...
не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.
До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.
я же сказал, событие ввода буквы. А не выход.
6 ноя 18, 19:28    [21725783]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Eld Hasp
Как быть с новой строкой?

DataGridTest.Items.Add(
Было?
6 ноя 18, 19:33    [21725793]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20292
Petro123
Eld Hasp
Как быть с новой строкой?

DataGridTest.Items.Add(
Было?
Кури внимательно то, что написал Роман. Нет никакого Add
6 ноя 18, 19:35    [21725794]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Eld Hasp
пропущено...
До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.
я же сказал, событие ввода буквы. А не выход.
Да, при изменении любого символа, даже если не было выхода.
6 ноя 18, 19:35    [21725795]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Eld Hasp
Как быть с новой строкой?

DataGridTest.Items.Add(
Было?
Нет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?
6 ноя 18, 19:38    [21725798]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3311
Eld Hasp
Roman Mejtes
Eld Hasp,

это не буфер, а так называемое представление коллекции (ICollectionView)
для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник.
Который и поддерживается в DataGrid.
Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он.
Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.
Так как "выловить" изменение ячейки до выхода из неё?
И как быть с новой строкой? Можно ли сделать что-то с этим?

редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно.

            {
                new Person("Roman", 3),
                new Person("Sofia", 39),
            };

            PersonesView = new ListCollectionView(Persones);
            var i = PersonesView as IEditableCollectionViewAddNewItem;


интерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления

    public class Person : BaseModel, IEditableObject
    {
        //Данный конструктор класса нужен для автоматического создания новый элементов в DataGrid
        public Person() { }

        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public string Name { set; get; }
        public int Age { set; get; }

        public void BeginEdit()
        {
            Debug.Print($"Person: {this} Begin Edit");
        }

        public void CancelEdit() 
        {
            Debug.Print($"Person: {this} Cancel Edit");
        }

        public void EndEdit()
        {
            Debug.Print($"Person: {this} End Edit");
        }

        public override string ToString()
        {
            return $"Person: {Name}, {Age}";
        }
    }

Так же можно отслеживать состояния представления коллекции, примерно следующим образом
        
            Persones = new ObservableCollection<Person>()
            {
                new Person("Roman", 3),
                new Person("Sofia", 39),
            };

            PersonesView = new ListCollectionView(Persones);
            if (PersonesView is INotifyPropertyChanged ipc)
            {
                ipc.PropertyChanged += ICV_PropertyChanged;
            }

        private void IECVANI_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (!(sender is IEditableCollectionViewAddNewItem editable)) return;
            Debug.Write($"Changed property '{e.PropertyName}':");
            switch (e.PropertyName)
            {
                    //ADD
                case nameof(IEditableCollectionView.CurrentAddItem):
                    Debug.Write(editable.CurrentAddItem); break;
                case nameof(IEditableCollectionView.IsAddingNew):
                    Debug.Write(editable.IsEditingItem); break;
                case nameof(IEditableCollectionView.CanAddNew):
                    Debug.Write(editable.CanAddNew); break;
                case nameof(IEditableCollectionViewAddNewItem.CanAddNewItem):
                    Debug.Write(editable.CanAddNewItem); break;
                    //EDIT
                case nameof(IEditableCollectionView.CurrentEditItem):
                    Debug.Write(editable.CurrentEditItem);
                    break;
                case nameof(IEditableCollectionView.IsEditingItem):
                    Debug.Write(editable.IsEditingItem); break;
                case nameof(IEditableCollectionView.CanCancelEdit):
                    Debug.Write(editable.CanCancelEdit); break;
                case nameof(IEditableCollectionView.CanRemove):
                    Debug.Write(editable.CanRemove); break;
            }
            Debug.WriteLine(null);

        }
6 ноя 18, 19:38    [21725799]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Eld Hasp
Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?
проверь. Я удивлюсь.
6 ноя 18, 19:40    [21725801]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3311
естественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSource
6 ноя 18, 19:40    [21725803]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20292
Eld Hasp
Нет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?
был ли топикстартеру полезен хотя бы один пост Петро?
6 ноя 18, 19:43    [21725805]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Shocker.Pro
Eld Hasp
Нет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?
был ли топикстартеру полезен хотя бы один пост Петро?
партсобрание?
Был ли полезен хоть один твой пост?
Или ты из группы поддержки?
6 ноя 18, 19:46    [21725807]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20292
Мне жаль его время
6 ноя 18, 19:49    [21725808]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Shocker.Pro
Мне жаль его время

А мне жаль когды ты советуешь модифицировать грид)
Почему и говорю - пенсионер.
6 ноя 18, 19:54    [21725813]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38491
Roman Mejtes
интерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления

Спасибо за пример.
Правильно я понял, что это ниже альтернатива, хотя и за деньги?
<telerik:RadGridView BeginningEdit="radGridView_BeginningEdit"
             RowEditEnded="radGridView_RowEditEnded">
    <!--...-->
</telerik:RadGridView>
6 ноя 18, 20:01    [21725820]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Petro123
Eld Hasp
Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?
проверь. Я удивлюсь.
Проверил - исключение.

К сообщению приложен файл. Размер - 78Kb
6 ноя 18, 20:34    [21725853]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Roman Mejtes
естественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSource
Не совсем понял пример.

ipc.PropertyChanged += ICV_PropertyChanged;

private void IECVANI_PropertyChanged(object sender, PropertyChangedEventArgs e)

Это описка или речь о разных обработчиках?
6 ноя 18, 20:47    [21725866]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 233
Roman Mejtes
Eld Hasp
пропущено...
Так как "выловить" изменение ячейки до выхода из неё?
И как быть с новой строкой? Можно ли сделать что-то с этим?

редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно.
То что геморройно я понял.... Вот такие мелки нюансы в WPF, превращающиеся в геморрой, и удивляют...
6 ноя 18, 20:51    [21725868]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить