Что-то я конкретно с WPF запутался.
Есть страница. В шапке прописан атрибут DataContext с указанием на отдельный класс — модель данных.
На странице лежит GridControl от DevExpress. У него указан атрибут
ItemsSource="{Binding MainReport}"
На этой же странице несколько текстбоксов и кнопка.
Текст боксы прописаны примерно так:
Класс указанный в 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() не помогает. Обращения к свойству в дебаге не видно.
K>либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,
К сожалению не смог разобраться как это событие реализовать. Смотрел в примеры, но видимо что-то упускаю, потому что не заработало. Полный бы рабочий пример увидеть...
Здравствуйте, 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
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 фактически начинаю работать.
Здравствуйте, 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
K>только евент снаружи так не работает, на то он и евент
Ага, таки это обработчик эвента. Окей. А снаружи его надо будет принудительно вызывать в классе страницы или грид от DevExpress это сам сумеет?
Я пробовал писать обработчик, но эффекта не возымело.
Здравствуйте, CyberRussia, Вы писали:
K>>только евент снаружи так не работает, на то он и евент CR>Ага, таки это обработчик эвента. Окей. А снаружи его надо будет принудительно вызывать в классе страницы или грид от DevExpress это сам сумеет? CR>Я пробовал писать обработчик, но эффекта не возымело.
обработчик не надо писать, в классе где свойство нужно его "rise fire" вызвать короче
Здравствуйте, CyberRussia, Вы писали:
K>>либо событие PropertyChanged с именем свойства к которому ItemsSource грида привязан,
CR>К сожалению не смог разобраться как это событие реализовать. Смотрел в примеры, но видимо что-то упускаю, потому что не заработало. Полный бы рабочий пример увидеть...
В том же классе, где объявлен MainReport, наверняка есть метод RaisePropertyChanged — вот его и надо вызвать в нужный момент. Или добавить и вызвать — то есть, реализовать интерфейс INotifypropertyChanged для класса, в котором находится свойство MainReport.