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 바인딩} 헤더 행이어야 함) , 열이 없음.
도움을 주시면 감사하겠습니다.
아니요, 출력 창에 바인딩 오류가 없습니다. – MartinKleiner
itemsource 바인딩을 포함 시키려고 했습니까? –
ItemsControl에는 제안하는 ItemsSource 줄이 포함되어 있으며 ItemsTemplate 문은 템플릿에 Binding 문을 포함하지 않아야합니다. ItemsControl에서 제거하고 Binding 문을 템플릿에 배치하면 UI에서 DataGrid가 모두 제거됩니다. – MartinKleiner