Невозможно вставить строки в Datagrid, используя DataGridTemplateColumn - PullRequest
0 голосов
/ 22 октября 2018

Записи из моего ObservableCollection правильно загружены в мой datagrid, я могу редактировать существующие строки, но не могу вставить новые строки.

Я использую DataGridTemplateColumn в моем View следующим образом:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ListRoundViewModel}" CanUserAddRows="True">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Number">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

Вот мой ViewModel:

public class SettingsViewModel 
{       

    public ObservableCollection<Round> ListRoundViewModel { get; set; }

    public SettingsViewModel()
    {

        ListRoundViewModel = new ObservableCollection<Round>();
        ListRoundViewModel.Add(new Round(10));
        ListRoundViewModel.Add(new Round(5));
        ListRoundViewModel.Add(new Round(8));

    }
}

Я просто устанавливаю DataContext при загрузке представления:

private void Settings_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new SettingsViewModel();
}

И Model для типа объекта, используемого в ObservableCollection

public class Round : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private int_number;


    public Round()
    {

    }

    public Round(int number)
    {
        this._number = number;
    }


    public int Number
    {
        get
        {
            return _number;
        }
        set
        {
            _number = value;
            OnPropertyChanged("Number");
        }
    }

    private void OnPropertyChanged(string propertyname)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
    } 
}

С другой стороны, при использовании DataGridTextColumn, например, сзади, вставка строки работает отлично.

<DataGridTextColumn Header="Number" Binding="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

При запуске приложения кажется, что событие BeginEdit Datagrid не запускается в последнем ряду.

Не знаю, правильно ли я выявил свою проблему, но DataGridTextColumкласс не соответствует моим потребностям пользовательского интерфейса, а DataGridTemplateColumn соответствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...