Datagrid.AddingNewItem 未在视图模型中执行操作

Datagrid.AddingNewItem Not Performing Action in View Model

当引发数据网格的 AddingNewItem 事件时,我正在使用 Caliburn.Micro 的消息操作语法在我的视图模型中调用我的 AddSampleWithType 方法。当用户在数据网格中按下 Enter 键并且数据网格开始创建新行时,我想使用 Sample class' 构造函数在 Samples BindableCollection 中创建一个新项,该构造函数需要SampleType 被传入。

这是我的视图的 DataGrid XAML:

<DataGrid Name="Samples" SelectedIndex="{Binding SamplesIndex}" Margin="5" Grid.Row="3"
                 BorderBrush="White" BorderThickness="1" AutoGenerateColumns="False" 
                  cal:Message.Attach="[Event AddingNewItem] = [Action AddSampleWithType($eventArgs)]">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Sample Names" Binding="{Binding Name}" Width="*" >
                    <DataGridTextColumn.HeaderStyle>
                        <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource MetroDataGridColumnHeader}" >
                            <Setter Property="HorizontalContentAlignment" Value="Center" />
                        </Style>
                    </DataGridTextColumn.HeaderStyle>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

以及视图模型中的重要代码:

public void AddSampleWithType(EventArgs e)
{
    AddingNewItemEventArgs newItemEventArg = (AddingNewItemEventArgs)e;
    newItemEventArg.NewItem = new Sample(selectedSampleType, "New Sample", SessionSettings.Instance.UserID);
}

我在AddSampleWithType方法的第一条语句下了一个断点,但是程序从来没有到过那里;该方法永远不会被调用。

我的 cal:Message.Attach 声明有什么问题我没看到吗?

您是否尝试将 AddingNewItemEventArgs 作为方法的参数?因为方法 "signature" 必须匹配事件签名...仅仅传递 EventArgs 是不够的.. CM 理解这一点,特别是因为您使用的是 $eventArgs special.

当我添加一个事件时,我根本不知道它的签名我会使用设计器添加方法 "code behind" 首先将我需要的部分复制并粘贴到我的 viewmodel 方法中.

https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.addingnewitem(v=vs.110).aspx