2012-01-28 4 views
1

제품 유형 목록을 보여주는 DataGrid가 있습니다. 내가하고 싶은 일은 그리드가 마스터 데이터를 표시하는 일종의 마스터/세부 정보보기를 가지고 텍스트 상자 (등)의 모음이 자세히보기를 보여주는 것입니다. 세부 정보는 주로 텍스트의 크기 때문에 표에 표시하는 것이 적절하지 않은 큰 텍스트 열에 대한 것입니다. 그리드와 상세 영역 모두에 표시되는 일부 데이터 항목도 있습니다.DataGrid 양방향 바인딩

또한 그리드와 세부 영역이 함께 바인딩되어 있으므로 둘 중 하나의 변경으로 인해 기본 데이터 소스가 업데이트됩니다. 그리드가 변경되면 (예 :) 그리드가 변경되는 즉시 세부 영역에 반영되고 그 반대의 경우도 마찬가지입니다.

바인딩 및 종속성 속성을 사용하여이 작업을 수행 할 수 있다고 생각합니다.하지만 어떻게 설정합니까?

참고 : 바인딩을 수동으로 코드에서 정의 된 그리드에 표시되는 것을 열을 제어 할 수있는 사용자 ..로 당신이 DataGrid 당신이 할 필요가 DataContext의 결합라는 이름 경우

var column = new DataGridTextColumn() 
    { 
     Header = attribute.Name, 
     Binding = new Binding(attribute.ColumnName) { TargetNullValue = string.Empty }, 
     IsReadOnly = attribute.IsReadOnly 
    }; 

    dgProductsList.Columns.Add(column); 

답변

2

귀하의 세부 구역을 SelectedItem 그리드, 모든 바인딩을 내부에있는 항목의 속성을 예 :

<DataGrid Name="dg" .../> 
<Border DataContext="{Binding SelectedItem, ElementName=dg}"> 
    <StackPanel> 
     <TextBox Text="{Binding SomeTextProperty, UpdateSourceTrigger=PropertyChanged}"/> 
     <!-- ... --> 
    </StackPanel> 
</Border> 

이 초점이 TextBox을 떠날 때, 그렇지 않으면 텍스트가 변경 될 때, 기본적으로 두 가지 방법, 즉시 프로퍼티의 갱신을 만들기 위해 UpdateSourceTrigger=PropertyChanged를 추가합니다.

+0

이것이 작동하고 그리드의 기본 콜렉션이 업데이트됩니다 (수정 된 그리드 행으로 돌아 가면 세부 영역이 새 값으로 업데이트됩니다). 그러나 실제 그리드 셀은 업데이트되지 않습니다. 그리드의 동적 특성으로 인해 바인딩이 코드로 정의됩니다. 바인딩 코드를 표시하도록 질문이 업데이트되었습니다. – Remotec

+0

@RemotecUk : 아이템 클래스 [implement] (http://msdn.microsoft.com/en-us/library/ms229614.aspx) ['INCP'] (http://msdn.microsoft .com/en-us/library/system.componentmodel.inotifypropertychanged.aspx)? –