2017-02-06 15 views
0

Я хочу разрешить пользователю добавлять строки в datagrid. Я знаю Datagridview от WinForms, и на дне Datagrid всегда есть пустая строка, которую я могу заполнить данными.WPF Datagrid позволяет пользователю добавлять строки

<DataGrid x:Name="dgv" 
      Grid.ColumnSpan="4" 
      Grid.Row="1" 
      CanUserAddRows="True" 
      CanUserDeleteRows="True" 
      SelectionUnit="FullRow" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding Entries}"> 
     <DataGrid.Columns> 
      <DataGridComboBoxColumn Header="Anrede" Width="1*"></DataGridComboBoxColumn> 
      <DataGridTextColumn Header="Vorname" Width="2*" Binding="{Binding Vorname}" /> 
      <DataGridTextColumn Header="Nachname" Width="2*" Binding="{Binding Nachname}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

Код позади:

public ObservableCollection<Mitreisender> Entries { get; } 

public aufenthaltsWindow() 
{ 
    InitializeComponent(); 
    Entries = new ObservableCollection<Mitreisender>(); 
} 

Класс

public class Mitreisender 
{ 
    public int MitreisenderID { get; set; } 
    public Gast.AnredeTyp Anrede { get; set; } 
    public string Titel { get; set; } 
    public string Vorname { get; set; } 
    public string Nachname { get; set; } 

    public virtual Aufenthalt Aufenthalt { get; set; } 

    public Mitreisender() 
    { 

    } 
} 

ответ

2

Убедитесь, что Mitreisender класс имеет конструктор без параметров:

public Mitreisender() 
{ 

} 

Это необходимо для пустой «добавить» ряд, чтобы показать вверх.

Также убедитесь, что переплетные работы и что вы установили DataContext в DataGrid или его родительского окна к экземпляру класса, в котором определяется свойство записи:

public aufenthaltsWindow() 
{ 
    InitializeComponent(); 
    Entries = new ObservableCollection<Mitreisender>(); 
    DataContext = this; 
} 
+0

yes it see see updated question –

+0

Убедитесь, что вы правильно установили DataContext. См. Мое редактирование. – mm8

+0

Да, это потому, что DataContext !! Спасибо за вашу помощь! –

2

Вы должны установить DataGrid.ItemsSource в modifyable коллекции. Предположим, что ваш DataContext содержит свойство

public ObservableCollection<EntryViewModel> Entries { get; } 

с

class EntryViewModel // probably derive some ViewModelBase and implement INotifyPropertyChanged 
{ 
    public string Vorname { get; set; } 
    // ... other properties 
} 

Затем связать коллекцию из DataContext в ItemsSource.

<DataGrid x:Name="dgv" ItemsSource="{Binding Entries}" ...> 

С измененной коллекцией и вашими настройками будет доступна дополнительная линия для новых предметов. Вам все равно нужно привязать столбцы к фактическим свойствам элемента, я не рассматриваю эту часть здесь.

+0

Я обновил мой вопрос - еще нет строки для добавления строк. –

+0

@ MathisHüttl Просто, чтобы быть уверенным ... вы видите некоторые предопределенные элементы, если добавить их в коллекцию при инициализации? – grek40

+0

Хмм ... нет, я их не вижу ... похоже, привязка не работает ... правильно? –