Записи из моего 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
соответствует.