有关DataGrid AutoGenerateColumns的大多数帖子似乎都涉及如何规避默认行为。不幸的是,默认是我正在努力的。
我有几个使用Entity Framework 6.0创建的数据库表,并希望在我的View中使用同一个Datagrid在所有表中显示它们,以及AutoGenerating列。期望的结果:对于在运行时绑定的特定于类的Viewmodel,显示带有标题和至少一行的列。
View的用户控件的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,我可以在其中看到由水平和垂直滚动条包围的灰体(可能是行),在其上面有一条长行(必须是标题行) ,但没有列。
感谢任何帮助。
答案 0 :(得分:1)
您的datagrid需要设置其itemsource
尝试添加
ItemsSource =“{Binding CurrentDataTable}”
到datagrid声明。另外,你在输出窗口中得到任何绑定错误吗?
答案 1 :(得分:0)
此代码现在有效(谢谢J.金!)诀窍是摆脱数据模板,使用完全相同的绑定语句在网格中创建数据网格。
<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>