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

时间:2018-01-26 20:07:26

标签: c# wpf mvvm contextmenu

我来自WinForms背景,我不知道如何以WPF / MVVM方式处理此问题。在主窗体中有一个包含上下文菜单的DataGrid。 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>

这里粗略描述了我想要做的事情。从每个上下文菜单项我想触发相同的命令,但具有不同的参数。参数是:

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

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

也许我的计划过于复杂或不必要,所以在这种情况下可以随意提出替代方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

一个潜在的策略是:

  1. 使用绑定到MenuItem的IAction或ICommand打开表单单击
  2. 当表单关闭时,发送一条消息(例如IEventAggregator),然后由原始ViewModel
  3. 接收
  4. 然后,原始ViewModel会将正确的数据插入相应的ObservableCollection位置