WPF, DevExpress, RefreschData
От: CyberRussia  
Дата: 23.09.20 20:32
Оценка:
Что-то я конкретно с WPF запутался.
Есть страница. В шапке прописан атрибут DataContext с указанием на отдельный класс — модель данных.
На странице лежит GridControl от DevExpress. У него указан атрибут
ItemsSource="{Binding MainReport}"


На этой же странице несколько текстбоксов и кнопка.
Текст боксы прописаны примерно так:
<TextBox x:Name="NetIncomeCritery" Text="{Binding NetIncomeCritery}" Grid.Column="0" Grid.Row="0" />

Класс указанный в DataContext соответственно содержит свойства MainReport, NetIncomeCritery ...
Свойство MainReport выглядит примерно так
       public IQueryable<VwPapierEx> MainReport
        {
            get
            {
                IQueryable<VwPapier> query = connectDBReport.VwPapiers;
                if (NetIncomeCritery != null)
                {
                    decimal whereNetIncome;
                    if (Decimal.TryParse(NetIncomeCritery, out whereNetIncome))
                    {
                        query = from q1 in query
                                join q2 in connectDBReport.Akknetincs
                                on q1.Ticker equals q2.Ticker
                                where q1.Dimenstion == q2.Dimenstion && q1.Year == q2.Year && q1.Quarterly == q2.Quarterly && q2.Netinccomdev > whereNetIncome
                                select q1;
                    }
                }
                return query.Select(s => new VwPapierEx(s));
            }
        }

То есть предполагалось, что в зависимости от значений введенных пользователем в текстовые поля изменяется запрос для грида.
На кнопку повешен обработчик (находящийся в классе страницы).
И вот тут собственно возникает вопрос, а как написать код обработчика, чтобы GridControl перезапросил свойство и, соответственно, пересчитал отображаемые данные?
Использование MyGrid.RefreshData() не помогает. Обращения к свойству в дебаге не видно.
Re: WPF, DevExpress, RefreschData
От: ksg71 Германия  
Дата: 24.09.20 06:46
Оценка:
Здравствуйте, CyberRussia, Вы писали:

чтобы GridControl перезапросил свойство и, соответственно, пересчитал отображаемые данные?

либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,
либо сделать это свойство в виде ObservableCollection
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Отредактировано 24.09.2020 6:47 ksg71 . Предыдущая версия .
Re[2]: WPF, DevExpress, RefreschData
От: CyberRussia  
Дата: 24.09.20 11:13
Оценка:
K>либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,

К сожалению не смог разобраться как это событие реализовать. Смотрел в примеры, но видимо что-то упускаю, потому что не заработало. Полный бы рабочий пример увидеть...
Re[3]: WPF, DevExpress, RefreschData
От: ksg71 Германия  
Дата: 24.09.20 12:32
Оценка: 15 (1) +1
Здравствуйте, CyberRussia, Вы писали:

K>>либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,


CR>К сожалению не смог разобраться как это событие реализовать. Смотрел в примеры, но видимо что-то упускаю, потому что не заработало. Полный бы рабочий пример увидеть...


в обработчике кнопки или еще где

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MainReport)));

view model INotifyPropertyChanged ессно должна быть


и вот это "На кнопку повешен обработчик (находящийся в классе страницы)." уж тогда на Command стоит переделать
чтобы обработчик в классе модели представления был
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Отредактировано 24.09.2020 12:38 ksg71 . Предыдущая версия .
Re[4]: WPF, DevExpress, RefreschData
От: CyberRussia  
Дата: 24.09.20 13:11
Оценка:
K>PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MainReport)));
Значит в классе страницы, если писать по старинке, будет что-то типа:
protected void Filter_Click(object sender, EventArgs arg)
{
    (this.DataContext as INotifyPropertyChanged)?.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MainReport));
}

А в классе модели — наследование от интерфейса INotifyPropertyChanged , декларация события и все?


K>и вот это "На кнопку повешен обработчик (находящийся в классе страницы)." уж тогда на Command стоит переделать

K>чтобы обработчик в классе модели представления был
Оу... не подумал. Только c WPF фактически начинаю работать.
Re[5]: WPF, DevExpress, RefreschData
От: ksg71 Германия  
Дата: 24.09.20 15:30
Оценка:
Здравствуйте, CyberRussia, Вы писали:

K>>PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MainReport)));

CR>Значит в классе страницы, если писать по старинке, будет что-то типа:
CR>
CR>protected void Filter_Click(object sender, EventArgs arg)
CR>{
CR>    (this.DataContext as INotifyPropertyChanged)?.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MainReport));
CR>}
CR>


только евент снаружи так не работает, на то он и евент
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[6]: WPF, DevExpress, RefreschData
От: CyberRussia  
Дата: 24.09.20 15:35
Оценка:
K>только евент снаружи так не работает, на то он и евент
Ага, таки это обработчик эвента. Окей. А снаружи его надо будет принудительно вызывать в классе страницы или грид от DevExpress это сам сумеет?
Я пробовал писать обработчик, но эффекта не возымело.
Re[7]: WPF, DevExpress, RefreschData
От: ksg71 Германия  
Дата: 24.09.20 15:43
Оценка:
Здравствуйте, CyberRussia, Вы писали:

K>>только евент снаружи так не работает, на то он и евент

CR>Ага, таки это обработчик эвента. Окей. А снаружи его надо будет принудительно вызывать в классе страницы или грид от DevExpress это сам сумеет?
CR>Я пробовал писать обработчик, но эффекта не возымело.

обработчик не надо писать, в классе где свойство нужно его "rise fire" вызвать короче


https://www.tutorialspoint.com/mvvm/mvvm_first_application.htm вот полный пример

а у тебя в сеттере NetIncomeCritery нужно этот евент с именем MainReport "зажечь"
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Отредактировано 24.09.2020 15:56 ksg71 . Предыдущая версия . Еще …
Отредактировано 24.09.2020 15:50 ksg71 . Предыдущая версия .
Re[3]: WPF, DevExpress, RefreschData
От: Vladek Россия Github
Дата: 14.10.20 07:36
Оценка:
Здравствуйте, CyberRussia, Вы писали:

K>>либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,


CR>К сожалению не смог разобраться как это событие реализовать. Смотрел в примеры, но видимо что-то упускаю, потому что не заработало. Полный бы рабочий пример увидеть...


В том же классе, где объявлен MainReport, наверняка есть метод RaisePropertyChanged — вот его и надо вызвать в нужный момент. Или добавить и вызвать — то есть, реализовать интерфейс INotifypropertyChanged для класса, в котором находится свойство MainReport.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.