Mvvm 我的自动生成列不显示在Datagrid中

Mvvm 我的自动生成列不显示在Datagrid中,mvvm,wpf-controls,wpfdatagrid,autogeneratecolumn,Mvvm,Wpf Controls,Wpfdatagrid,Autogeneratecolumn,大多数关于DataGrid AutoGenerateColumn的帖子似乎都在讨论如何规避默认行为。不幸的是,违约是我正在努力解决的问题 我有几个使用EntityFramework6.0创建的数据库表,希望在视图中使用一个相同的Datagrid为所有表显示它们,并自动生成列。预期结果:对于在运行时绑定的特定于类的Viewmodel,显示带有标题的列和至少一行 视图用户控件的XAML: <UserControl.Resources> <DataTemplate x:Key

大多数关于DataGrid AutoGenerateColumn的帖子似乎都在讨论如何规避默认行为。不幸的是,违约是我正在努力解决的问题

我有几个使用EntityFramework6.0创建的数据库表,希望在视图中使用一个相同的Datagrid为所有表显示它们,并自动生成列。预期结果:对于在运行时绑定的特定于类的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>();
    }
class ClientsAdminTableViewModel:TableViewModel
{
//视图绑定到的属性
私有IList currentDataTable;
公共ObservableCollection CurrentDataTable
{
获取{return CollectionExtensions.ToObservableCollection(currentDataTable);}
set{currentDataTable=value;OnPropertyChanged(“currentDataTable”)}
}
公共客户端AdminTableViewModel()
{
DisplayName=Strings.ClientAdminDisplayName;
currentDataTable=context.Clients.ToList();
}
当绑定到{Binding CurrentDataTable}时,这段代码生成一个UI,在这里我可以看到一个灰色的主体(可能是行),由水平和垂直滚动条包围,上面有一条长线(必须是标题行),但没有列


非常感谢您的帮助。

您的datagrid需要设置其itemsource

尝试添加

ItemsSource=“{Binding CurrentDataTable}”

另外,在输出窗口中是否有任何绑定错误?

这段代码现在可以工作了(谢谢J.King!)诀窍是去掉数据模板,使用完全相同的绑定语句在网格中创建数据网格。



是否尝试包含itemsource绑定?ItemsControl包含您建议的ItemsSource行,ItemsTemplate语句应允许我在模板中不包含绑定语句。将其从ItemsControl中删除并将binding语句放置在模板中会将datagrid从UI中完全删除。我将将datagrid从数据模板中移出并使其工作,然后尝试将其移回。如果没有显示列,则无法获取记录,这可能是绑定问题或数据检索问题。谢谢J.King!删除数据模板并直接在网格中创建datagrid从一开始就起了作用,完全没有任何问题既然目标实现了,这就是我要做的——我仍然想知道以前的代码哪里出了问题。
    <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>