将不同的参数从上下文菜单传递到命令,并从窗体 WPF MVVM 返回数据



我来自WinForms背景,我不知道如何以WPF/MVVM的方式解决这个问题。在主窗体中有一个包含上下文菜单的数据网格。DataGrid 在主窗体的 ViewModel 中具有来自 ObservableCollection 的数据。

<DataGrid AutoGenerateColumns="False" Margin="0 10" Grid.Row="1" x:Name="dataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Page" Binding="{Binding Path=PageCurrent}"/>
<DataGridTextColumn Header="Pages" Binding="{Binding Path=PageCount}"/>
<DataGridTextColumn Header="Start" Binding="{Binding Path=NumberingStart}"/>
<DataGridTextColumn Header="End" Binding="{Binding Path=NumberingEnd}"/>
<DataGridTextColumn Header="Line 1" Binding="{Binding Path=Line1}"/>
<DataGridTextColumn Header="Line 2" Binding="{Binding Path=Line2}"/>
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Insert Before">
<MenuItem Header="Automatic Numbering"/>
<MenuItem Header="Data" />
</MenuItem>
<MenuItem Header="Insert After">
<MenuItem Header="Automatic Numbering" />
<MenuItem Header="Data" />
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

以下是我想做的粗略描述。从每个上下文菜单项中,我想触发相同的命令,但使用不同的参数。参数为:

  • 要插入的数据类型(自动编号或数据)
  • 插入位置(在当前数据网格行之前或之后)
  • 数据网格的当前选定行索引

根据第一个参数,将打开一个表单,以便用户可以生成相应的数据,当关闭表单时,数据将在正确的位置插入到可观察集合中(使用参数 2 和 3)。

也许我的计划太复杂或没有必要,所以在这种情况下,请随时提出替代方案。

谢谢!

一种可能的策略是:

  1. 使用绑定到菜单项单击的 IAction 或 IComm 打开表单
  2. 当表单关闭时,发送一条消息(例如 IEventAggregator),然后由原始 ViewModel 接收
  3. 然后,原始视图模型会将正确的数据插入到适当的可观察集合位置

最新更新