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 方法中.
当引发数据网格的 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 方法中.