Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF datagrid开始编辑新项_Wpf_Datagrid_Command_New Operator - Fatal编程技术网

WPF datagrid开始编辑新项

WPF datagrid开始编辑新项,wpf,datagrid,command,new-operator,Wpf,Datagrid,Command,New Operator,我有一个带有可编辑项的datagrid,我有一个按钮来创建这样一个项的新实例。datagrid已使用新项进行更新,但我无法选择最近添加的项并开始对其进行编辑 下面是我的代码: private void btnNewKenmerk_Click( object sender, RoutedEventArgs e ) { Kenmerk newKenmerk = new Kenmerk(); // the item to add Kenmerken.Add( newKenmerk

我有一个带有可编辑项的datagrid,我有一个按钮来创建这样一个项的新实例。datagrid已使用新项进行更新,但我无法选择最近添加的项并开始对其进行编辑

下面是我的代码:

  private void btnNewKenmerk_Click( object sender, RoutedEventArgs e )
  {
   Kenmerk newKenmerk = new Kenmerk(); // the item to add

   Kenmerken.Add( newKenmerk ); // this is an observablecollection. the datagrid (dgKenmerken) has this as itemssource

   // deselect all other items except our new kenmerk
   for( int i = 0; i < dgKenmerken.Items.Count; i++ )
   {
    Kenmerk kenmerk = ( Kenmerk )dgKenmerken.Items[ i ];
    DataGridRow dgRow = ( DataGridRow )dgKenmerken.ItemContainerGenerator.ContainerFromIndex( i );

    if( dgRow != null )
    {
     dgRow.IsSelected = ( kenmerk == newKenmerk );
    }
   }

   dgKenmerken.SelectedItem = newKenmerk;

   // start editing
   if( DataGrid.BeginEditCommand.CanExecute( newKenmerk, dgKenmerken ) )
   {
    DataGrid.BeginEditCommand.Execute( newKenmerk, dgKenmerken );
   }
  }

添加该项并更改行的背景,但BeginEdit命令开始编辑我以前选择的项,而不是添加的项。有人知道如何解决这个问题吗?

这是因为datagrid没有立即看到更改。推迟使用新添加的数据-请尝试将您的方法拆分为两个-一个添加,第二个使用。从第一个呼叫第二个,不是直接呼叫,而是通过dispatcher

这是因为datagrid没有立即看到更改。推迟使用新添加的数据-请尝试将您的方法拆分为两个-一个添加,第二个使用。从第一个呼叫第二个,不是直接呼叫,而是通过dispatcher

也许可以检查您选择的索引?我偶尔会遇到与SelectedItem不同的情况,可能edit命令使用SelectedIndex而不是SelectedItem。dgKenmerken.SelectedIndex=dgKenmerken.Items.Count-1使用SelectedIndex的缓存无效。我使用了以下代码:dgKenmerken.SelectedIndex=dgKenmerken.Items.IndexOfnewKenmerk;|这将SelectedIndex和SelectedItem更改为新项目,但仍然没有启动对该项目的编辑也许检查SelectedIndex?我偶尔会遇到与SelectedItem不同的情况,可能edit命令使用SelectedIndex而不是SelectedItem。dgKenmerken.SelectedIndex=dgKenmerken.Items.Count-1使用SelectedIndex的缓存无效。我使用了以下代码:dgKenmerken.SelectedIndex=dgKenmerken.Items.IndexOfnewKenmerk;|这将SelectedIndex和SelectedItem更改为新项目,但仍然没有启动对该项目的编辑