2009-06-10 4 views
2

Не могу поверить, что я в тупике с этой довольно простой практикой. Я изначально разместил это в дискуссиях WPF datagrid codeplex, но не получил ответа. Поэтому я пытаюсь здесь:Пересылка на WPF Datacrid's Datacontext

Я не могу найти способ сделать это. Я создаю datagrid, чей datacontext изначально заполнен строками из таблицы. Я реализовал функцию поиска, которая вернет несколько строк на основе условия. Предположим, я хочу отображать только те строки, как я могу уничтожить первоначально созданный файл данных и добавить недавно отфильтрованную коллекцию?

я наивно начал делать это так:

(Late Edit: я не могу набрать Generics код здесь - бросок в следующей строке suppoed бросить datagrid.Items к MyType (например,))

IEnumerable rows = datagrid.Items.Cast();

IEnumerable filtersRows = rows.Where (row => row.someCondition == true);

как мне теперь сделать мой datagrid только отфильтрованные? Только что:

datagrid.DataContext = null;

datagrid.DataContext = filtersRows;

не работает (даже если запах глупо по какой-либо причине).

Мне также нужно сделать обратное (как только я получу эту работу). Некоторая кнопка позволяет пользователю «очистить» результаты поиска и снова подключить DataContext к «строкам» (в приведенном выше фрагменте).

Что мне не хватает?

+0

, что происходит, когда вы назначаете dataGrid.DataContext = filteredRows? Это должно сработать, подумал я. –

+0

Если вы добавите '' тики вокруг вашего кода, вы также сможете опубликовать общий код. – Oskar

+0

Очевидно, что это нужно, чтобы назначить этот делегат (который фильтрует строки) непосредственно в свойство Filter коллекции Items. Я собираюсь попробовать это, как только приеду на работу. Я расскажу о том, как все получается. – 2009-06-10 13:58:04

ответ

0

Похоже, что некоторые подобные проблемы были встречены в this question.. В комментариях он даже говорит, что параметр datacontext имеет значение null, а затем повторное назначение его не работает.

Возможно, вам нужно изменить коллекцию товаров, как указано в этом ответе?

0

Вы пытались установить свойство ItemsSource?

3

Я столкнулся с подобной проблемой. Необходимо повторно применить конвертеры в моем DataGrid после изменения некоторых значений стиля.

Для меня это сработало:

myGrid.Items.Refresh() 

Оказывается повторно применить все правила, так что может работать для вас.

1

myGrid.Items.Refresh() работал для меня тоже, просто заново установить контекст перед

public void GridExamsRefresh() 
{ 
    grdExamenes.ItemsSource = (this.objPacienteOfContext).Exams; 
    grdExamenes.Items.Refresh(); 
}