WPF Datagrid MVVM:通过上下文菜单添加新行/无法在命令参数中检索新行上下文

时间:2014-09-25 06:17:27

标签: wpf mvvm contextmenu wpfdatagrid

将一个WPF数据网格绑定到一个observablecollection,它将从数据库中填充,该数据库可以根据列值的值进行编辑或不可编辑。

现在,想通过可编辑的上下文菜单点击在数据网格中添加一个新行,尽管现有的行不可编辑(即禁用)。

这可以通过使用列值上的数据触发器并在绑定值上定义转换器(即,selectedItem到行)来实现。现在,问题是当我添加新行时,我传递的命令参数是selectedItem,即

菜单项代码:

MenuItem Header="Add" Command="{Binding AddClickCommand}"
                          CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.SelectedItem}"

所以,这是我点击添加新行(第2行)的现有行(即第1行),因此,我得到现有行的上下文(即第1行)。

任何人都可以帮助我获取添加新行的上下文,即第2行,通过该行我可以设置某些标志以使该行可编辑!

2 个答案:

答案 0 :(得分:0)

如果您想在数据网格中添加一个新行,为什么不简单地创建一个添加命令,在其中向ObservableCollection添加一个新项目并将此新项目设置为您的selectedItem,以便在您的数据网格中选择它。

   private void AddCommandExecute()
   {
       var toAdd = new MyItem();//new "row item"
       this.MyCollection.Add(toAdd);//add to collection with automatic notification
       this.MySelectedItem = toAdd;//set as selected 
   }

答案 1 :(得分:0)

获取ObservableCollection

中新项目的索引
var myNewRow = new RowViewModel();
_rows.Add(myNewRow);
var newRowIndex = _rows.IndexOf(myNewRow);