2010-01-19 3 views
1

내 ViewModel의 DataTable에 바인딩 된 ItemSource로 내 View에 DataGrid가 있습니다. 프로그래밍 방식으로 DataTable을 업데이트하면 (명령을 통해 열 추가) 변경 내용이 View에 채워지지 않습니다. 또한 다른 탭으로 전환 한 다음 다시 전환하여 뷰를 무효화하면 변경 한 내용이 표시됩니다.MVVM ..을 사용하는 WPF Datagrid는 DataTable에 대한 양방향 바인딩이 가능합니까?

내 ViewModel은 InotifyPropertyChanged에서 상속되며 ViewModel의 다른 바운드 속성에 대해 동일한 프로세스를 사용하므로 PropertyChanged 이벤트를 올바르게 발생시키고 예상대로 작동합니다.

MVVM 패턴을 사용하여 바인딩 된 DataTable에 대한 변경 사항을 반영하도록 DataGrid를 가져올 수 있습니까?

보기 코드에서 DataGrid를 새로 고치는 데 사용할 수있는 DataGrid 이벤트가 있습니까?

도움 주셔서 감사합니다. -Steven

답변

2

DataTable에서 행을 수정하고 셀 내용을 편집하는 것이 DataGrid에 반영되면 (나를 위해 효과가 있음) ColumnChanges가 맞지 않는 것처럼 보입니다. 만약 당신이 AutoGenerateColumns 옵션을 사용하고 있다면 나는 그것이 초기화시에 일어나지 만 나중에 변경을 보지 않는다고 상상한다.

DataTable에 열을 추가 할 때 발생하는 이벤트 (예기치 않은 이벤트)를 찾을 수 있다면 코드를 수동으로 추가 할 수 있습니다. 실용적이거나 아닐 수도있는 또 다른 해킹은 DataTable을 null로 설정 한 다음 매번 호출되는 OnPropertyChanged를 사용하여 DataTable에 속성을 다시 설정하는 것입니다. 그러면 DataGrid를 강제로 다시 빌드해야합니다.

private DataTable _myDataTable; 

public DataTable MyDataTable 
{ 
    get { return _myDataTable; } 
    set 
    { 
     _myDataTable = value; 
     OnPropertyChanged("MyDataTable"); 
    } 
} 

void SomeMethod() 
{ 
    ....results in column changes 
    DataTable holder; 
    holder = MyDataTable 
    MyDataTable = null; 
    MyDataTable = holder;   
} 
+0

내 시나리오에서 작업 해결 방법을 찾는 방법을 찾았습니다. 왜 나 자신을 시도하지 않았는지 잘 모르겠지만, 어쨌든 당신의 시간과 도움에 감사드립니다. 감사합니다. – stevosaurus

+0

기쁨, 행복하게 도왔습니다. – AndyG

1

당신은 데이터 그리드에 바인딩 ObservableCollection에 <> 유형을 사용해야합니다. 이 때까지 DataGrid는 ViewModel의 DataTable 변경을 업데이트 할 수 있습니다.

ObservableCollection <> 대신 형식으로 바인딩하면 PropertyChanged 이벤트를 발생시키는 것이 효과적이지 않습니다.

관련 문제