我的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}"/>
运行App时,似乎没有在最后一行上触发Datagrid的BeginEdit事件。
我不知道我是否正确暴露了我的问题,但是DataGridTextColum
类不适合我的UI需求,而DataGridTemplateColumn
却适合。