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