我在使用Caliburn.Micro的消息操作語法在我的視圖模型中調用我的AddSampleWithType
方法時引發了數據網格的AddingNewItem
事件。當用戶按下DataGrid中的回車鍵和數據網格開始創建一個新的行,我想用這要求SampleType
中通過Sample
類的構造函數在我Samples
BindableCollection創建一個新的項目。Datagrid.AddingNewItem在視圖模型中不執行操作
這裏我的觀點的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聲明我沒有看到?
是的,我想無論是一般事件藝術和具體的一個AddingNewItem。都沒有工作。 – blueshift
如此嘲笑這件事,看看是否有遺漏的東西......它在「開始」添加新行時立即開始。現在,這個數據網格埋在其他控件(嵌套)中嗎?有沒有datagrid沒有datacontext的可能性?你有CM調試活動? 'LogManager.GetLog = type => new DebugLog(type);'在Initialize();之前放置引導程序構造函數,假設您沒有或從未使用它。在調試模式下從VS運行項目,控制檯輸出將包含CM調試信息... – mvermef
下面是解決方案。我必須使用Caliburn.Micro文檔中列出的完整Interaction.Trigger語法。這包括對$ eventArgs特殊值使用cal:Parameter語句。當我運行該應用程序時,它在創建新行之前調用了AddSampleWithType方法。奇怪的是,在這個測試之後,我又回到了簡寫的Message.Attach語法,並調用了AddSampleWithType方法。它表現得像是「充滿泵」所需的完整句法。謝謝,mvermef,爲您提供幫助。 – blueshift