Datagrid.AddingNewItem在视图模型

时间:2016-09-25 16:45:01

标签: wpf mvvm datagrid caliburn.micro

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

这是我的视图的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声明?

1 个答案:

答案 0 :(得分:0)

您是否尝试将AddingNewItemEventArgs作为Method的参数?因为方法“签名”必须匹配事件签名...简单地传递EventArgs是不够的.. CM明白,特别是因为你使用$ eventArgs特殊。

当我添加一个事件时,我不知道它的签名,我会使用设计器添加方法“代码隐藏”第一次复制并将我需要的部分粘贴到我的viewmodel方法中。

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