Мои автоматически созданные столбцы не отображаются в датагриде
Кажется, что большинство сообщений относительно DataGrid AutoGenerateColumns имеют дело с тем, как обойти поведение по умолчанию. К сожалению, по умолчанию это то, с чем я борюсь.
У меня есть несколько таблиц базы данных, созданных с помощью Entity Framework 6.0, и я хотел бы отобразить их в моем представлении, используя одну и ту же сетку данных для всех таблиц и автоматическое создание столбцов. Желаемый результат: для зависящей от класса Viewmodel, связанной во время выполнения, отобразите столбцы с заголовками и хотя бы одну строку.
XAML пользовательского элемента управления View:
<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} этот код создает пользовательский интерфейс, в котором я вижу серое тело (возможно, строки), окруженное горизонтальной и вертикальной полосами прокрутки, поверх которой одна длинная строка (которая должна быть строкой заголовка), но нет колонны.
Любая помощь приветствуется.
2 ответа
Этот код теперь работает (Спасибо, Дж. Кинг!) Хитрость заключалась в том, чтобы избавиться от шаблона данных, создать сетку данных прямо в сетке с точно такими же связывающими утверждениями.
<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>
Ваша сетка данных должна иметь свой набор источников данных
попробуйте добавить
ItemsSource="{Binding CurrentDataTable}"
к декларации сетки данных. Кроме того, вы получаете какие-либо ошибки привязки в окне вывода?