DataGrid AutoGenerateColumns に関するほとんどの投稿は、デフォルトの動作を回避する方法を扱っているようです。残念ながら、デフォルトは私が苦労しているものです。
Entity Framework 6.0 で作成されたいくつかのデータベース テーブルがあり、すべてのテーブルに 1 つの同じデータグリッドを使用してビューに表示し、列を自動生成したいと考えています。望ましい結果: 実行時にバインドされたクラス固有の Viewmodel の場合、ヘッダーと少なくとも 1 つの行を含む列を表示します。
ビューのユーザー コントロールの 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>();
}
{Binding CurrentDataTable} にバインドすると、このコードは UI を生成します。水平および垂直スクロールバーに囲まれた灰色の本体 (おそらく行) が表示され、その上に 1 つの長い行 (ヘッダー行である必要があります) が表示されますが、列。
どんな助けでも大歓迎です。