大多数关于 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,我可以在其中看到被水平和垂直滚动条包围的灰色主体(可能是行),在其顶部有一条长线(必须是标题行),但没有列。
任何帮助表示赞赏。