2009-06-10 5 views
2

나는이 매우 간단한 문제로 난처한 상황에 있다고 생각하지 않습니다. 원래 WPF DataGrid codeplex 토론에 게시했지만 응답이 없습니다. 그래서 나는 여기에서 노력하고있다 :WPF로 리 바인딩 Datagrid의 Datacontext

나는 이것을 할 길을 찾을 수 없다. datacontext가 처음에 테이블의 행으로 채워지는 DataGrid를 만듭니다. 조건에 따라 일부 행을 반환하는 검색 기능을 구현했습니다. 그 행만 표시하고 싶다면 처음에 만든 datacontext를 삭제하고 새로 필터링 된 컬렉션을 추가하려면 어떻게합니까?

나는 순진하게도 이런 식으로 일을 시작 :

(늦은 편집 : 여기 제네릭 코드를 입력 할 수없는 것 - (예를 들어합니다 MyType에 datagrid.Items 캐스팅 suppoed 다음 줄에 캐스팅))

IEnumerable rows = datagrid.Items.Cast();

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

이제 어떻게 datagrid가 filteredRows 만 표시합니까? 그냥 수행 :

datagrid.DataContext = null;

datagrid.DataContext = filteredRows;

(어떤 이유로 든 바보 같은 냄새가납니다.) 작동하지 않습니다.

나는 또한이 작업을 수행하면 되풀이 작업을 수행해야합니다. 일부 버튼 클릭은 사용자가 검색 결과를 "지우고"DataContext를 "행"(위의 스 니펫에서)에 다시 연결할 수 있도록 허용해야합니다.

무엇이 누락 되었습니까?

+0

전에 컨텍스트를 다시 설정, 너무 나를 위해 일한? 이것은 효과가 있다고 생각했다. –

+0

코드 주위에''틱 (tick)을 추가하면 일반 코드도 게시 할 수 있습니다. – Oskar

+0

분명히 그것을 수행하는 방법은 Items 컬렉션의 Filter 속성에 직접 위임자 (행을 필터링)를 할당하는 것입니다. 일단 내가 일하게되면이 일을 시도 할 것입니다. 나는 상황이 어떻게 돌아가는지에 대해 다시보고 할 것이다. –

답변

0

비슷한 문제가 발생했습니다. this question. 댓글에서 그는 datacontext를 null로 설정 한 다음 다시 할당하면 작동하지 않는다고 말합니다.

아마도 해당 답변에서 언급 한대로 항목 컬렉션을 수정해야합니까?

0

ItemsSource 속성 설정을 시도 했습니까?

3

비슷한 문제가 발생했습니다. 일부 스타일 값을 변경 한 후 DataGrid에서 변환기를 다시 적용해야합니다. 나이 들어

는 일 :

myGrid.Items.Refresh() 

그것은에 나타납니다 당신을 위해 작동 할 수 있도록 모든 규칙을 다시 적용합니다.

1

myGrid.Items.Refresh()는 당신이 dataGrid.DataContext = filteredRows을 할당 할 때 발생하는

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