2013-12-08 34 views
0

关于DataGrid AutoGenerateColumns的大多数帖子似乎都涉及如何绕过默认行为。不幸的是,默认情况下我正在努力。我的自动生成的列不显示在Datagrid中

我有几个数据库表使用实体框架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> 

用户控件绑定到特定的类“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>(); 
    } 

当绑定到{结合CurrentDataTable}这个代码产生的UI,其中,I可以看到水平和垂直滚动包围的灰体(可能是行),在其上一个长行的顶部(其中必须是标题行),但没有列

任何帮助表示赞赏。

回答

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> 
1

您的数据网格需要有它的ItemSource设置

尝试添加

的ItemsSource = “{结合CurrentDataTable}”

到DataGrid声明。另外,在输出窗口中是否有任何绑定错误?

+0

不,我在输出窗口中没有出现绑定错误。 – MartinKleiner

+0

你尝试过包括itemsource绑定吗? –

+0

ItemsControl包含您建议的ItemsSource行,并且ItemsTemplate语句应该允许我不在模板中包含绑定语句。从ItemsControl中删除它并将模板中的Binding语句从UI中删除数据网格。 – MartinKleiner

相关问题