2010-01-24 2 views
1

DataGrid 및 문자열 [] [] dataSource 배열이이 DataGrid의 소스 데이터로 있습니다. 값이 문자열 [내가] [j]가 변경되었을 때문자열 [] [] 배열로 바인딩 된 DataGrid의 셀을 업데이트하는 방법

dataGrid.ItemsSource = dataSource; 

for (int i = 0; i < columns; i++) 
{ 
    dataGrid.Columns.Add(new DataGridTextColumn 
    {       
     Binding = new Binding(string.Format("[{0}]", i)) 
    }); 
} 

가 어떻게 데이터 그리드의 셀에 정보를 업데이트 할 수 있습니다 : 나는 코드가 바인딩을 설정하려면 다음을 사용할 수 있습니까?

답변

1

바인딩하는 데이터 항목이 INotifyPropertyChanged로 구현 된 경우 데이터 항목/컬렉션이 속성이 변경되었다는 것을 브로드 캐스팅하고 데이터 격자가 자동으로 업데이트되므로 업데이트가 자동으로 수행됩니다. 일 (수동 그리드 리바 인 딩은 데이터의 양에 따라 느려질 수 있음).

그래서 바인딩 할 데이터 구조를 문자열에서 INotifyPropertyChanged를 구현하는 것으로 변경하는 경우 (쉽게 데이터 개체를 코딩하는 경우에도 마찬가지 임) 그리드가 자동으로 열을 생성하도록 설정하는 경우 , 필요한 경우 dataGrid.ItemSource 특성을 설정하고 개별 데이터 오브젝트를 갱신하십시오.

+0

배열에 대해 INotifyPropertyChanged를 구현하는 방법을 이해할 수 없습니다. 예를 들어 Customer 클래스가있는 경우 Set 함수에서 NotifyPropertyChanged ("Name")를 호출하기 만하면됩니다. 문자열 [] [] 배열에 하나의 값을 설정하면 "Name"대신 NotifyPropertyChanged에 무엇을 전달해야합니까? –

+0

그 종류의 내가 무엇을 의미하는지 - strin [] []에서 멀리 이동하고 대신 List 또는 ObservableCollection 을 사용하고 'some object'에 INotifyPropertyChange를 구현합니다. 귀하의 데이터가 어떻게 생겼는지 정확히 알지 못하지만 실제 이유가없는 것처럼 보일 수도 있습니다. 그러나 데이터 바인딩 및 MVVM/MVC/MVP와 같은 표준 패턴을 사용하면 실제로 작업을 수행하게됩니다. 유지 보수)를 훨씬 쉽게 할 수 있습니다. – slugster

+0

그러나 문자열 [] [] 접근법이 붙어 있다면, 내가 본 대부분의 격자가 행에서 새로 고침을 호출 할 수 없도록 그리드에서 특정 행을 삭제하고 다시 삽입하는 방법을 살펴볼 것입니다 레벨 (그리드 레벨 만). – slugster

0

데이터 배열을 다시 바인드하십시오.

+0

고마워요, 조지. 하지만 문자열 배열의 값이 하나만 변경된 경우 너무 비싸다고 생각합니다. PropertyChanged와 같은 것을 구현할 방법이 있습니까? 또는 miniExcel 응용 프로그램을 구현하기위한 제안 (더 나은 생산성을 위해 어떤 구성 요소를 사용해야합니까?) –

+0

유일한 문제는 DataGrid를 임의의 수량의 데이터로 바인딩해야하므로 내 데이터 객체에 Properties를 구현할 수 없다는 것입니다. –

+0

오 죄송합니다, Aran Mulholland에 대한 의견입니다. –

0

Heres a Hack.

업데이트 된 열을 알고있는 경우 열에 대한 바인딩을 동일한 바인딩의 새 바인딩으로 설정할 수 있습니다. 그러면 바인딩이 전체 열에 대해 다시 평가됩니다. 그게 비싼 내가 아는. 나는 slugster가 제안한 것처럼 속성을 가진 객체에 바인딩 할 것입니다.

관련 문제