0

大多数关于 DataGrid AutoGenerateColumns 的帖子似乎都在处理如何规避默认行为。不幸的是,默认值是我正在努力解决的问题。

我有几个使用 Entity Framework 6.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>

用户控件绑定到特定于类的“类”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,我可以在其中看到被水平和垂直滚动条包围的灰色主体(可能是行),在其顶部有一条长线(必须是标题行),但没有列

任何帮助表示赞赏。

4

2 回答 2

1

您的数据网格需要设置其 itemsource

尝试添加

ItemsSource="{绑定 CurrentDataTable}"

到数据网格声明。此外,您是否在输出窗口中收到任何绑定错误?

于 2013-12-09T16:46:49.067 回答
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>
于 2013-12-12T06:54:10.920 回答