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

Откуда:
Сообщений: 4710
Eld Hasp
Я имел ввиду, конкретно, вот такой нюанс. Новая строка в DataGrid существует только в нём. В источнике её нет. Поэтому по источнику не получится определить были изменения или нет. В идеале, мне нужно получить такое поведение. При любом изменении в новой строке DG она сразу должна добавиться в источник.

Отдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать.
Eld Hasp
В данном случае мне надо определить были ли внесены изменения в список, для этого мне надо сравнить список из DG и список в модели. Любое расхождение между списками: разное количество элементов, разная их последовательность, любое изменение в одном из свойств. Для последнего я и переопределил Equals. Если такой подход не верен, то как лучше сделать?

Ну, Equals сам по себе описанную задачу не решает, он просто проверяет эквивалентность экземпляров классов.
Здесь возникают такие вопросы:
1) Откуда в DG взялся отдельный список? Вы биндите к DG отдельную копию?
2) Если списки различаются - что присходит дальше?
3) Допустим, в списке отображаются фамилия и имя пользователя. В последней строке был Петров Вася. Эту последнюю строку удалили, добавили новую, и снова ввели "Петров" и "Вася". Различия есть? Или нет?
4) Поскольку Equals и GetHashCode зависят от пользовательского ввода, то вполне возможны дублированные записи - т.е. несколько разных элементов списка, которые будут эквивалентны. Что планировалось делать в таком случае?
Eld Hasp
radgridview - посмотрю, что за зверь. А как довести "компонент штатный до своих хотелок" - не знаю. То ли "хотелок" больше чем возможности штатного элемента, то ли мои возможности и умения значительно ниже моих "хотелок"

А вы озвучте хотелки. У стандартного грида есть и группировки, можно прикрутить и фильтрацию, и, возможно, некий наименьший общий знаменатель вполне устроит (меня вот он в 90% случаев устраивает).
Я лично не работал с телериковским гридом, но в случае с гридом от девэкспресса за его мегафункционал всегда приходилось расплачиваться тяжеловесностью UI - просто на уровне отклика UI.
6 ноя 18, 14:58    [21725334]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Petro123
Eld Hasp,
Мрак.
Короче, ты жить богато и с зарплатой хочешь?
Тогда дальнейшее твое творчество уже наносит вред развитию программиста.
Выкинь xml и этот топик будет не нужен.
Удачи!
Имхо.
Это не кому-то на заказ. Просто появилась возможность (в основном время) заняться освоением WPF и C#. Чтобы не в пустую из головы придумывать задачи, посмотрел, что чуток может помочь в работе. Создаю приложение и учусь на этом.
Пока хочу хоть более-менее WPF и C# освоить. До БД пока... токо смотрю в ту сторону.
6 ноя 18, 15:00    [21725339]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Petro123
Eld Hasp
Они могут не помещаться все на видимом поле. И пользователь может передвинуть их вверх вниз в зависимости от того, что ему нужно видеть в первую очередь.
а) скроллинг б) доп. Колонка и свойство Очередность.
Скроллинг - это понятно. Он и так будет.
А вот доп. Колонка - зачем это пользователю? Ему просто надо передвинуть строки вверх-вниз. Доп колонка для него лишнее. А при сохранении всё равно это преимущества не даст, так данные (в доп. колонке) всё рано изменились.
6 ноя 18, 15:04    [21725346]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
А вот доп. Колонка - зачем это пользователю?
ты сам ввел в Модель важное для ТЕБЯ свойство очередность. Разве нет?
6 ноя 18, 15:09    [21725356]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Сон Веры Павловны
Отдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать.
+1
6 ноя 18, 15:11    [21725359]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Создаю приложение и учусь на этом.
делая свой грид но не зная субд?
Это уже перекос будет.
Как для двоих сразу юзверей сделать программу на xml без субд? Без транзакции?
6 ноя 18, 15:13    [21725365]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Сон Веры Павловны
Eld Hasp
Я имел ввиду, конкретно, вот такой нюанс. Новая строка в DataGrid существует только в нём. В источнике её нет. Поэтому по источнику не получится определить были изменения или нет. В идеале, мне нужно получить такое поведение. При любом изменении в новой строке DG она сразу должна добавиться в источник.

Отдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать.
Да, это одно из решений. Так тоже делал. Но мне кажется, "красивее" и удобнее делать это в DataGrid - если возможно, конечно.
Сон Веры Павловны
Eld Hasp
В данном случае мне надо определить были ли внесены изменения в список, для этого мне надо сравнить список из DG и список в модели. Любое расхождение между списками: разное количество элементов, разная их последовательность, любое изменение в одном из свойств. Для последнего я и переопределил Equals. Если такой подход не верен, то как лучше сделать?

Ну, Equals сам по себе описанную задачу не решает, он просто проверяет эквивалентность экземпляров классов.
Здесь возникают такие вопросы:
1) Откуда в DG взялся отдельный список? Вы биндите к DG отдельную копию?
2) Если списки различаются - что присходит дальше?
3) Допустим, в списке отображаются фамилия и имя пользователя. В последней строке был Петров Вася. Эту последнюю строку удалили, добавили новую, и снова ввели "Петров" и "Вася". Различия есть? Или нет?
4) Поскольку Equals и GetHashCode зависят от пользовательского ввода, то вполне возможны дублированные записи - т.е. несколько разных элементов списка, которые будут эквивалентны. Что планировалось делать в таком случае?
1) Да - список в DG это копия списка в модели. Сохранить данные из View можно только явно - нажав на кнопку.
2) Если списки различаются, то становится активной кнопка "Сохранить" и пользователь может сохранить данные. Так же при переходе к другому списку (в данном примере этот функционал не реализован) пользователю выводится предупреждение, что он может потерять данные.
3) По алгоритму это будут считаться одинаковыми списками.
4) Они так и будут дублироваться, пользователя в этом не ограничиваю. Возможно, потом, проверю при пробной эксплуатации, сделаю предупреждение об этом, но ограничивать не буду.
Сон Веры Павловны
Eld Hasp
radgridview - посмотрю, что за зверь. А как довести "компонент штатный до своих хотелок" - не знаю. То ли "хотелок" больше чем возможности штатного элемента, то ли мои возможности и умения значительно ниже моих "хотелок"

А вы озвучте хотелки. У стандартного грида есть и группировки, можно прикрутить и фильтрацию, и, возможно, некий наименьший общий знаменатель вполне устроит (меня вот он в 90% случаев устраивает).

1) При изменении значения любой ячейки сразу (без выхода из фокуса) определить это, чтобы сделать кнопку "Сохранить" активной (это для данного примера, но есть ещё небольшой и другой функционал).
2) При изменении любой ячейки в новой строке, снизу сразу должна появиться другая новая строка.
3) По возможности для решения как можно меньше использовать CB.

Первый, пункт я ещё как-то представляю решение с помощью TextBox в ячейке. При фокусе на ячейке сразу перевести TextBox в режим редактирования. Придётся использовать событие TextBox.TextChanged и обработчик присоединять через EventSetter. Но не знаю насколько хорошее такое решение.

Второй пункт как сделать не знаю. Нужны подсказки. Хотя бы в какую сторону копать.
6 ноя 18, 15:31    [21725387]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Petro123
Eld Hasp
А вот доп. Колонка - зачем это пользователю?
ты сам ввел в Модель важное для ТЕБЯ свойство очередность. Разве нет?
Да, но для этого достаточно, в данном случае, индекса элемента в списке. По нему я и определяю очерёдность. Это нагляднее и удобнее для пользователя.
6 ноя 18, 15:36    [21725396]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Petro123
Eld Hasp
Создаю приложение и учусь на этом.
делая свой грид но не зная субд?
Это уже перекос будет.
Как для двоих сразу юзверей сделать программу на xml без субд? Без транзакции?
Пока - да. Освоюсь с WPF буду прикручивать БД. Пока хочу максимально абстрагироваться от способа хранения данных. Чтобы изменив модель можно было ничего другого не трогать. Поэтому и не хочу привязывать DG напрямую к данным. И данная в примере часть, работает только с небольшим списком дополнительных свойств или информации.
Есть ещё другие данные большего объёма, там без БД в многопользовательском режиме не обойтись, пока делаю просто пробную однопользовательскую реализацию. Для самообучения.
6 ноя 18, 15:43    [21725413]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Пока хочу максимально абстрагироваться от способа хранения данных.
не выйдет.
При бд весь твой топик и опыт прямиком в мусор.
А сейчас, на событие отрисовки ЯЧЕЙКИ подставляй data[row, column]
)))
6 ноя 18, 16:19    [21725473]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Petro123
Eld Hasp
Пока хочу максимально абстрагироваться от способа хранения данных.
не выйдет.
При бд весь твой топик и опыт прямиком в мусор.
А сейчас, на событие отрисовки ЯЧЕЙКИ подставляй data[row, column]
)))
Я то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется.
Что касается отрисовки, то такое часто применял при работе с WinForms. Там, по сути, по другому и невозможно. Хотелось бы чего-то другого в WPF. Я всё же склоняюсь к UserControl. Мне кажется это лучшее выглядит для WPF.
6 ноя 18, 17:18    [21725587]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Даже если код не пригодится, опыт-то останется.
хороший оксюморон)).
Делайте! Вас все равно не свернуть с пути. Удачи!
6 ноя 18, 17:42    [21725632]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Eld Hasp
Я то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется.
Делай, не слушай Петю, он, похоже, никогда не учился, сразу родился программистом.
Код, написанный два-три года назад, тем более в учебных целях, не пригодится, но опыт будет.
6 ноя 18, 17:45    [21725635]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Shocker.Pro
Eld Hasp
Я то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется.
Делай, не слушай Петю, он, похоже, никогда не учился, сразу родился программистом.
Код, написанный два-три года назад, тем более в учебных целях, не пригодится, но опыт будет.
Ну токо с Вашей помощью! Куда ж я без Вас!
6 ноя 18, 17:56    [21725650]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
DG пофигу на транзакции, это обычный элемент управления и к таблицам БД он имеет посредственное отношение , которое заключается в том, что он поддерживает DataTable класс.
Лично я, по возможности, использую всегда DataGrid, ведь с помощью шаблонов я могу выкинуть из него всё, что хочу. Есть еще вариант ListView, он более легковесный.

В DG всё готово, добавление\редактирование\горизонтальная виртуализация, сортировка и бери и пользуйся, но не без проблем конечно.

При использовании команд, состояние кнопки IsEnabled зависит от выполнения метода CanExecute, по этому у вас кнопка и не включается. Для того, чтоб кнопка обновила статус, нужно вручную вызвать метод CommandManager.InvalidateRequerySuggested() если обновление кнопки подписывается на этот вызов, см. пример ниже
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

или возбудить внутреннее событие кнопки CanExecuteChanged, с её обычной реализацией
        public event EventHandler CanExecuteChanged;

В первом случае учтите, что при таком подходе, вызов метода InvalidateRequerySuggested приведет к проверке всех команд которые подписаны на CommandManager.RequerySuggested. По этому, CanExecute должен быть максимально быстрой операцией.
Можно сделать, проще и дёргать событие ICommand.CanExecuteChanged вручную, либо отслеживать изменение свойств заданной модели представления через INPC внутри команды и возбуждать событие как это сделано во всякие MVVMLight и прочем.

Так же в биндинге источник обновляется по триггеру, который по умолчанию в 99% случаев задан как обновление при потере фокуса, но можно поменять на немедленное обновление.
"{Binding UpdateSourceTrigger=PropertyChanged}"

В примере есть 2 кнопки, настроенные на разные команды, но выполняющие одни и те же методы. У 1 кнопки состояние обновляется, а у второй кнопки нет.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Input;

namespace WpfApp18
{
    public abstract class BaseModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChagned(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    }

    public class MainModel : BaseModel
    {
        private string _myText;
        public string MyText
        {
            get => _myText;
            set
            {
                if (Equals(_myText, value)) return;
                _myText = value;
                OnPropertyChagned(nameof(MyText));
                MyCommand1.UpdateState();
            }
        }

        private IRelayCommand _myCommand1;
        public IRelayCommand MyCommand1 => _myCommand1 ??
            (_myCommand1 = new RelayCommand(OnMyCommand, CanMyCommand));


        private IRelayCommand _myCommand2;
        public IRelayCommand MyCommand2 => _myCommand2 ??
            (_myCommand2 = new RelayCommand(OnMyCommand, CanMyCommand));


        private bool CanMyCommand(object arg)
        {
            return !string.IsNullOrWhiteSpace(MyText);
        }

        private void OnMyCommand(object obj)
        {
            MessageBox.Show(MyText, "Message");
        }

        public MainModel()
        {

        }
    }


    public interface IRelayCommand : ICommand
    {
        void UpdateState();
    }

    public class RelayCommand : IRelayCommand
    {
        public event EventHandler CanExecuteChanged;

        private readonly Action<object> _onExecute;
        private readonly Func<object, bool> _canExecute;


        public RelayCommand(Action<object> onExecute, Func<object, bool> canExecute)
        {
            _onExecute = onExecute;
            _canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return _canExecute?.Invoke(parameter) ?? false;
        }

        public void Execute(object parameter)
        {
            _onExecute?.Invoke(parameter);
        }

        public void UpdateState()
        {
            OnCanExecuteCahgned();
        }

        protected void OnCanExecuteCahgned()
        {
            CanExecuteChanged?.Invoke(this, null);
        }

    }
}

<Window x:Class="WpfApp18.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp18"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainModel/>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}" Margin="5"/>
            <Button Content="Save" Command="{Binding MyCommand1}" Margin="5,0,5,5"/>
            <Button Content="Save" Command="{Binding MyCommand2}" Margin="5,0,5,5"/>
        </StackPanel>
    </Grid>
</Window>
6 ноя 18, 18:01    [21725655]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Но в целом у меня от WPF впечатление какой-то сыроватости. Вроде, как хорошее начало, идеи, но начинаешь делать то того не хватает, то то как-то по кривому делать приходится, то сложности на пустом месте - какая-то мелочь в сотню строк обходится и т.д.
Ни как не пойму это у меня такое впечатление от нехватки знаний, или оно так и есть?
6 ноя 18, 18:01    [21725656]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Shocker.Pro
Делай, не слушай Петю
детский сад пенсионера не любящего модальных окон)
6 ноя 18, 18:36    [21725701]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
DG пофигу на транзакции, это обычный элемент управления и к таблицам БД он имеет посредственное отношение , которое заключается в том, что он поддерживает DataTable класс.
Мне где-то попадалась (не могу найти сейчас) статья о том, как DG вносит изменения в источник. И там было объяснено, что у DG есть какое-то внутреннее представление или буфер для данных. И изменения происходят там. По умолчанию данные скидываются в источник при выходе (потере фокуса) из строки. Можно изменить на скидывание по выходу из ячейки. С новой строкой - только по выходу из строки.
Я не помню как точно - но там было название этого механизма. И транзакцией я его назвал не правильно, просто не смог найти правильного названия.
Roman Mejtes
Лично я, по возможности, использую всегда DataGrid, ведь с помощью шаблонов я могу выкинуть из него всё, что хочу. Есть еще вариант ListView, он более легковесный.

В DG всё готово, добавление\редактирование\горизонтальная виртуализация, сортировка и бери и пользуйся, но не без проблем конечно.
Ага...! То что для Вас "не без проблем" это для меня два дня копания в инете и несколько десятков пробных вариантов.
Roman Mejtes
При использовании команд, состояние кнопки IsEnabled зависит от выполнения метода CanExecute, по этому у вас кнопка и не включается. Для того, чтоб кнопка обновила статус, нужно вручную вызвать метод CommandManager.InvalidateRequerySuggested() если обновление кнопки подписывается на этот вызов
Кнопка у меня включается нормально. Повесил привязку на Button.IsEnabled к свойству VM показывающему о наличии/отсутствии изменений. Это свойство в любом случае у меня есть в VM, так как нужно ещё для другого функционала кроме кнопки. Я этот кусок делал ещё то того как начал знакомится с командами - использовал события. После Вашей помощи начал переделывать. А CanExecute - я просто забыл переделать. Было свойство и я на автомате прибиндил к нему Button.IsEnabled. Для чистоты, раз использую команды, конечно надо переделать. Вы безусловно правы.
Roman Mejtes
Так же в биндинге источник обновляется по триггеру, который по умолчанию в 99% случаев задан как обновление при потере фокуса, но можно поменять на немедленное обновление.
"{Binding UpdateSourceTrigger=PropertyChanged}"
Я знаю об этом триггере, у меня в примере он установлен. Но для "поимки" изменения в источнике, в данном случае это элемент списка, придётся ловить его в самом элементе и потом "проталкивать" до VM - объявить событие в классе элемента и подписать на него VM. А для новой строчки даже это не поможет. Так как новая строчка существует только "внутри" DataGrid.
6 ноя 18, 18:39    [21725706]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Ни как не пойму это у меня такое впечатление от нехватки знаний, или оно так и есть?
есть такое, и пусть Shocker.Pro прыгает от злости. Это эксперимент MS и он всегда может от него отказаться.
6 ноя 18, 18:40    [21725709]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Petro123
детский сад пенсионера не любящего модальных окон)
Да я моложе вас всех вместе взятых! (С)


От модальных окон я отказался по простой причине. Представь, что есть приложение, не хелловорлд, в нем запущено несколько окон на вкладках, к примеру журнал заказов, несколько заказов, карточка клиента и т.п. И одна из этих вкладок вызвала некий диалог. А юзеру чтобы корректно заполнить этот диалог необходимо заглянуть в другое окно, скажем, в журнал доставок. Или звонит клиент, нужно срочно пообщаться с ним по его заказу, а у тебя открыт модальный наполовину заполненный диалог.
Так что модальность мешает и очень сильно. Диалог должен блокировать только тот компонент программы, из которого он вызван, а не все приложение.
6 ноя 18, 18:42    [21725715]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Petro123
есть такое, и пусть Shocker.Pro прыгает от злости. Это эксперимент MS и он всегда может от него отказаться.
Есть мнение, что WPF закончен к версии 4.0. В 4.5 были лишь косметические изменения, по сравнению с предыдущими версиями.
6 ноя 18, 18:44    [21725718]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Мне где-то попадалась (не могу найти сейчас) статья о том, как DG вносит изменения в источник. И там было объяснено, что у DG есть какое-то внутреннее представление или буфер для данных. И изменения происходят там. По умолчанию данные скидываются в источник при выходе (потере фокуса) из строки. Можно изменить на скидывание по выходу из ячейки. С новой строкой - только по выходу из строки.
Я не помню как точно - но там было название этого механизма. И транзакцией я его назвал не правильно, просто не смог найти правильного названия.
это наверно dataSet. Но тут WPF уже по другому.
6 ноя 18, 18:46    [21725719]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Roman Mejtes
Member

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

это не буфер, а так называемое представление коллекции (ICollectionView)
для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник.
Который и поддерживается в DataGrid.
Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он.
Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.
6 ноя 18, 18:51    [21725726]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
Eld Hasp,

это не буфер, а так называемое представление коллекции (ICollectionView)
для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник.
Который и поддерживается в DataGrid.
Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он.
Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.
Так как "выловить" изменение ячейки до выхода из неё?
И как быть с новой строкой? Можно ли сделать что-то с этим?
6 ноя 18, 18:58    [21725736]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание изменений в DataGrid  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Eld Hasp
Так как "выловить" изменение ячейки до выхода из неё?
на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.
6 ноя 18, 19:05    [21725748]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить