2013-06-05 2 views
2

초급 질문입니다. 내 WPF 양식에 다음과 같은 XAML 있습니다.Datagrid 열 머리글 값이 누락되었습니다.

<DataGrid x:Name="GridTable" 
       ItemsSource="{Binding GridDataSource}" 
       HorizontalGridLinesBrush="#FFE2E2E2" 
       VerticalGridLinesBrush="#FFE2E2E2" 
       CanUserAddRows="False" 
       CanUserResizeColumns="True" 
       Margin="10,140,214,10" 
       SelectionChanged="GridTableSelectionChanged" > 

     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="{Binding Selection}" ></DataGridCheckBoxColumn> 
      <DataGridTextColumn Header="{Binding XmlFile}"></DataGridTextColumn> 
      <DataGridTextColumn Header="{Binding Result}"></DataGridTextColumn> 
     </DataGrid.Columns> 

     <DataGrid.Resources> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="BorderThickness" Value="0"/> 
       <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
      </Style> 
     </DataGrid.Resources> 

    </DataGrid> 

뷰 모델 코드

public string Selection 
    { 
     get { return "Selection"; } 
    } 

    public string XmlFile 
    { 
     get { return "Xml File"; } 
    } 

    public string Result 
    { 
     get { return "Result"; } 
    } 

    private DataTable CreateDataSource() 
    { 
     var dt = new DataTable(); 

     var dc = new DataColumn(Selection, typeof(bool)); 
     dt.Columns.Add(dc); 

     dc = new DataColumn(XmlFile, typeof(string)); 
     dt.Columns.Add(dc); 

     dc = new DataColumn(Result, typeof(string)); 
     dt.Columns.Add(dc); 

     return dt; 
    } 

나는 거기에 데이터를 채우는 후 내 그리드 소스로이 데이터 테이블을 사용하고 있습니다.

응용 프로그램을 실행할 때 바인딩 값마다 Selection, XmlFileResult 헤더가있는 3 열의 DataGrid를 볼 수 있어야합니다. 하지만 열이없는 격자 만 보입니다. 아무도 내가 이것에서 무엇이 잘못 되었는가를 이해하도록 도울 수 있습니까?

또한 데이터 소스 GridDataSource을 그리드에 연결하려고합니다. 이 데이터 테이블에는 그리드 열과 동일한 이름을 가진 3 개의 열과 관련 데이터가 있습니다. 데이터 테이블에 데이터를로드하고 표시하도록 알리면 이미 3 개의 빈 열이 표시되고 다음으로 3 열의 데이터 테이블이 표시됩니다. 누구든지 내 코드가 잘못된 점을 이해하도록 도와 줄 수 있습니까? 더 많은 정보가 필요하면 알려주세요. 내 AutoGenerateColumns 태그가 true로 설정되어있을 때,

편집 또한 나는 그때 3 개 빈 컬럼과 함께 데이터 그리드 내 데이터 테이블의 추가 3 열을 참조났습니다. AutoGenerateColumns` 태그를 false로 설정하면 데이터가 표시되지 않고 빈 열이 3 개만 표시됩니다.

+0

기본 VM을 게시 할 수 있습니까? 디버그 아웃 윈도우에'BindingExpression' 오류가 있습니까? – DHN

+0

편집보기 .... 점심 시간에 한 번 외출 : – Sandy

+0

점심을 즐기십시오 - 'BindingExpression' 오류는 무엇입니까? – DHN

답변

0

현재 당신이 당신의 GridDataSource이 3 곳 (Selection, XmlFileResult) 열 머리글이 아닌 값을 표시 할 노출해야한다는 의미 DataGridColumn.Header을 결합하고 있습니다. 나는 당신의 문제와 데이터 모델을 이해한다면, 나는 당신이 바인딩 할 것은, HeaderBinding하지 않습니다 어떻게 생각 : 또한 DataGrid

<DataGrid.Columns> 
    <DataGridCheckBoxColumn Header="Selection" Binding="{Binding Selection}"/> 
    <DataGridTextColumn Header="XmlFile" Binding="{Binding XmlFile}"/> 
    <DataGridTextColumn Header="Result" Binding="{Binding Result}"/> 
</DataGrid.Columns> 

가에 대한 열을 자동으로 생성됩니다 여기에 사용 될 수 AutoGenerateColumns 옵션, 연결된 데이터 소스를 기반으로하므로 DataGrid.Columns을 수동으로 지정하지 않아도됩니다.

+0

나는 생각하지 않습니다 .... 나는 ViewModel의 속성에 헤더 텍스트를 바인딩하려고합니다. 이제 다시, 데이터 테이블에 그리드의 데이터 소스를 바인딩하려고합니다. DataGrid의 기존 열을 사용하려면 바인딩이 성공적으로 이루어 지도록 동일한 열 이름으로 데이터 테이블을 준비했습니다. – Sandy

+0

기술적으로,'DataGridCheckBoxColumn'을 바인딩 할 때 ViewModel에서'DataRowView'가 필요하지만 지금은 문자열을 가지고 있습니다. 그리고 나는 데이터 테이블에 모든 데이터를 가지고 있습니다. – Sandy

+0

그렇다면 열을 자동으로 생성하면 원하는 것을 처리 할 수 ​​있습니다. 데이터를 바인드하고 컬럼 헤더를 생성합니다. [Here] (http://db.tt/cwhpUhQo)는 내 모델보기에서 DataTable에 바인딩하고 열을 자동으로 생성하는 간단한 예제입니다. 속성의 생성 지점에서 열 머리글이 설정되므로 다시 바인딩 할 필요가 없습니다. – dkozl

관련 문제