列表中在选中的当前行的下一行添加新的一行(追加一行)
解释:做添加的意思也就是给集合Add一行数据,这个Add也就是默认会添加到泛型集合的最后一行
解释:1: Add(数据源);
2:方法换成Inset(索引+1,数据源);这实现按选中行添加。其中参数 :索引+1代表的意思是,选中行加1,也就 是在当前选中行下去添加一行数据
实现过程:
1:如果做这个功能是不是要在获取控件的行号啊。
2:获取行号?
3:再想想,如如果我获取当前选中行的索引的话是不是可以按照索引添加1(在当前选中行下面添加一行)去实现效果?(也就是:当前行的索引数+1)
首先我要获取DataGrid的选中索引:SelectedIndex 获取索引 Binding的是ViewModel的一个ing类型字段。把索引获取到。
在View页面的DataGrid控件新加一个SelectedIndex来获取当前的选中索引:所Binding的DataGridIndex是在ViewModel中添加的一个可监听属性变化的字段(int类型)
<DataGrid x:Name="MetroDataGrid" Grid.Row="1" Grid.Column="0"
RenderOptions.ClearTypeHint="Enabled"
TextOptions.TextFormattingMode="Display"
Margin="5"
RowHeaderWidth="40"
IsSynchronizedWithCurrentItem="True"
GridLinesVisibility="All"
HeadersVisibility="All"
SelectionUnit="FullRow"
SelectedIndex="{Binding DataGridIndex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/*这个是获取的当前索引*/
ItemsSource="{Binding Path=Items}"/>
加上断点看了下ViewModel中的这个Binding字段DataGridIndex获取到选中行的索引了。因为我添加是调用的ViewModel中的Add的Command命令。
添加命令:
private Void Add()
{
#region 在控件当前选中行下一行追加一行
int selectIndex = DataGridIndex;
if (selectIndex == 0) // 如果没有选中行就默认添加,添加到最后一行
{
Items.Add(newInstance);
}
else // 有选中行,把获取过来的选中索引基础上+1
{
Items.Insert(selectIndex + 1, newInstance);
}
this.CurrentItem = newInstance;
MoveScrollbarToCurrentPosition(this.CurrentItem);
this.IsEditEnable = true;
#endregion
}