2016-07-31 3 views
0

Ich habe meine DataGrid an <ObservableCollection> People gebunden. Es erzeugt die Spalten wie erwartet. Mein Problem ist, dass ich den Benutzer leere Zeilen hinzufügen lassen möchte. Wie kann ich das machen?WPF DataGrid erlaubt dem Benutzer nicht, leere Zeilen hinzuzufügen

Hier ist meine komplette Code:

<Window x:Class="WpfApplication5.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel> 
     <DataGrid AutoGenerateColumns="True" 
        ItemsSource="{Binding People}" 
        CanUserAddRows="True"/> 
    </StackPanel> 
</Window> 

public class Person 
{ 
    public Person(string firstName, string lastName) 
    { 
     Firstname = firstName; 
     Lastname = lastName; 
    } 

    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
} 

public sealed class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private ObservableCollection<Person> people = new ObservableCollection<Person> 
    { 
     new Person("Jack", "Shephard"), 
     new Person("John", "Locke") 
    }; 
    public ObservableCollection<Person> People 
    { 
     get { return people; } 
     set 
     { 
      people = value; 
      OnPropertyChanged("People"); 
     } 
    } 

    private void OnPropertyChanged(string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var viewModel = new ViewModel(); 
     DataContext = viewModel; 
    } 
} 
+1

Wenn [ 'CanUserAddRows' ] (https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.canuseraddrows (v = vs.110) .aspx) wird auf "true" (Standardwert) gesetzt, dann sollte der Benutzer in der Lage sein um bereits neue Zeilen hinzuzufügen, aber es benötigt einen parameterlosen Konstruktor. Oder fügen Sie 'ObservableCollection' eine leere' Person' hinzu – dkozl

Antwort

2

einen Standard-Konstruktor für die beobachtbaren Klasse (eine Klasse Wrapper machen kann, wenn man es zu differenzieren müssen)

public class Person 
{ 
    public Person() 
    { 
+0

Danke Machine Learning, das ist die Lösung! – Vahid