2016-09-25 31 views
0

我在使用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聲明我沒有看到?

回答

0

您是否嘗試將AddingNewItemEventArgs作爲Method的參數?因爲方法「簽名」必須符合事件簽名...只需傳遞EventArgs是不夠的.. CM明白,特別是因爲你使用$ eventArgs特殊。

當我添加了一個事件時,我並不知道它的簽名,所以我會使用設計器添加方法來「代碼隱藏」第一個副本,並將需要的部分粘貼到我的viewmodel方法中。

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

+0

是的,我想無論是一般事件藝術和具體的一個AddingNewItem。都沒有工作。 – blueshift

+0

如此嘲笑這件事,看看是否有遺漏的東西......它在「開始」添加新行時立即開始。現在,這個數據網格埋在其他控件(嵌套)中嗎?有沒有datagrid沒有datacontext的可能性?你有CM調試活動? 'LogManager.GetLog = type => new DebugLog(type);'在Initialize();之前放置引導程序構造函數,假設您沒有或從未使用它。在調試模式下從VS運行項目,控制檯輸出將包含CM調試信息... – mvermef

+0

下面是解決方案。我必須使用Caliburn.Micro文檔中列出的完整Interaction.Trigger語法。這包括對$ eventArgs特殊值使用cal:Parameter語句。當我運行該應用程序時,它在創建新行之前調用了AddSampleWithType方法。奇怪的是,在這個測試之後,我又回到了簡寫的Message.Attach語法,並調用了AddSampleWithType方法。它表現得像是「充滿泵」所需的完整句法。謝謝,mvermef,爲您提供幫助。 – blueshift

相關問題