Search code examples
c#wpfdata-bindingdatagrid

DataGrid there is no the last row for input


I have problem with DataGrid. There is no the last empty row. To binding I use BindableCollection also tried ObservableCollection but it doesn't help. In all tutorials this row is. enter image description here

This is xaml of main window.

<Window x:Class="EnglishVocabulary.MainWindow"
    xmlns:vm="clr-namespace:EnglishVocabulary.ViewModel"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:EnglishVocabulary"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>


    <DataGrid AutoGenerateColumns="False" CanUserAddRows="True"
              ItemsSource="{Binding WordsList}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Word" Binding="{Binding Word}"/>
            <DataGridTextColumn Header="Translation" Binding="{Binding Translation}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

This is a viewModel code

class MainWindowViewModel
{
    public BindableCollection<WordModel> WordsList { get; set; }

    public MainWindowViewModel()
    {
        WordsList = new BindableCollection<WordModel>()
        {
            new WordModel("Hello", "Wordl")
        };
    }
}

WordModel

class WordModel
{
    public string Word { get; set; }
    public string Translation { get; set; }

    public WordModel(string word, string translation)
    {
        Word = word;
        Translation = translation;
    }

}

Solution

  • WordModel class needs a constructor without parameters:

    public WordModel()
    {
    }
    

    It is not generated by default because there another one with parameters.

    Other constructors cannot be used because there is no way to provide correct arguments for them.