2013-12-08 4 views
0

DataGrid AutoGenerateColumns와 관련된 대부분의 게시물은 기본 동작을 피하는 방법을 다루는 것 같습니다. 불행히도 디폴트는 제가 고심하고있는 것입니다.내 자동 생성 된 열이 Datagrid에 표시되지 않습니다.

Entity Framework 6.0으로 만든 여러 데이터베이스 테이블이 있고 모든 테이블에 대해 동일한 Datagrid를 사용하여 내 View에 표시하고 열을 자동 생성합니다. 원하는 결과 : 런타임에 바인딩 된 클래스 별 ViewModel의 경우 헤더와 적어도 하나의 행이있는 열을 표시합니다. 보기의 사용자 컨트롤의

XAML :

<UserControl.Resources> 
    <DataTemplate x:Key="TableDataTemplate"> 
     <DataGrid 
      AutoGenerateColumns="True" 
      GridLinesVisibility="All" 
      HorizontalScrollBarVisibility="Visible" 
      VerticalScrollBarVisibility="Visible"> 
     </DataGrid> 
    </DataTemplate> 
</UserControl.Resources> 

<StackPanel Height="720" Width="980"> 
    <!-- shows user which menu item was chosen --> 
    <TextBlock Text="{Binding DisplayName}"/> 

    <!-- defines the Input data grid for adding to DB table --> 
    <Grid Height="80" MaxHeight="200"> 
     <ItemsControl 
      ItemsSource="{Binding CurrentDataTable}" 
      ItemTemplate="{StaticResource TableDataTemplate}"> 
     </ItemsControl> 
    </Grid> 

사용자 컨트롤이 클래스 고유의 'Class'TableViewModel에 바인딩, 모든 데이터베이스 테이블 구현. 일례 :

결합
class ClientsAdminTableViewModel : TableViewModel 
{ 
    // the Property the view binds to 
    private IList<Client> currentDataTable; 

    public ObservableCollection<Client> CurrentDataTable 
    { 
     get { return CollectionExtensions.ToObservableCollection<Client>(currentDataTable); } 
     set { currentDataTable = value; OnPropertyChanged("CurrentDataTable")} 
    } 

    public ClientsAdminTableViewModel() 
    { 
     DisplayName = Strings.ClientAdminDisplayName; 
     currentDataTable = context.Clients.ToList<Client>(); 
    } 

이 코드는 어느 하나의 긴 선 위에, I는 수평 및 수직 이동 막대에 의해 둘러싸인 회색 본체 (아마 행)를 참조 할 수있는 UI를 생성한다 ({CurrentDataTable 바인딩} 헤더 행이어야 함) , 열이 없음.

도움을 주시면 감사하겠습니다.

답변

0

이 코드는 이제 작동합니다 (감사합니다 J. King!) 트릭은 데이터 템플릿을 없애고 동일한 바인딩 문을 사용하여 그리드에서 데이터 그리드를 바로 생성하는 것이 었습니다.

<StackPanel Height="720" Width="980"> 
     <!-- shows user which menu item was chosen --> 
     <TextBlock Text="{Binding DisplayName}"/> 

     <!-- defines the Input data grid for adding to DB table --> 
     <Grid Height="200" MaxHeight="400"> 

      <DataGrid 
       ItemsSource="{Binding CurrentDataTableNew}" 
       AutoGenerateColumns="True" 
       GridLinesVisibility="All" 
       HorizontalScrollBarVisibility="Visible" 
       VerticalScrollBarVisibility="Visible" > 
      </DataGrid> 
     </Grid> 
    </userControl> 
1

당신의 데이터 그리드는 itemsource는 데이터 그리드 선언에

"{CurrentDataTable 바인딩}"

ItemsSource = 추가

시도를 설정해야 할 필요가있다. 또한 출력 창에 바인딩 오류가 있습니까?

+0

아니요, 출력 창에 바인딩 오류가 없습니다. – MartinKleiner

+0

itemsource 바인딩을 포함 시키려고 했습니까? –

+0

ItemsControl에는 제안하는 ItemsSource 줄이 포함되어 있으며 ItemsTemplate 문은 템플릿에 Binding 문을 포함하지 않아야합니다. ItemsControl에서 제거하고 Binding 문을 템플릿에 배치하면 UI에서 DataGrid가 모두 제거됩니다. – MartinKleiner