0

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 つの長い行 (ヘッダー行である必要があります) が表示されますが、列

どんな助けでも大歓迎です。

4

2 に答える 2