【问题标题】:WPF Datagrid MVVM : Add new row through context menu/ Not able to retrieve the new row context in the command parameterWPF Datagrid MVVM:通过上下文菜单添加新行/无法在命令参数中检索新行上下文
【发布时间】:2014-09-25 06:17:26
【问题描述】:

有一个 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 行,我可以通过它设置某些标志以使该行可编辑!

【问题讨论】:

    标签: wpf mvvm contextmenu wpfdatagrid


    【解决方案1】:

    如果您想在数据网格中添加新行,为什么不简单地创建一个添加命令,在其中将新项目添加到 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 
       }
    

    【讨论】:

    • 谢谢!!.. 这可以通过将 SelectedItem 设置为新添加的行来实现。
    【解决方案2】:

    获取ObservableCollection中新项目的索引。

    var myNewRow = new RowViewModel();
    _rows.Add(myNewRow);
    var newRowIndex = _rows.IndexOf(myNewRow);
    

    【讨论】:

      猜你喜欢
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2014-10-27
      • 2016-08-03
      相关资源
      最近更新 更多