2016-09-25 2 views
0

Ich verwende die Nachrichtenaktionssyntax von Caliburn.Micro, um meine AddSampleWithType-Methode in meinem Ansichtsmodell aufzurufen, wenn das Ereignis AddingNewItem des Datagrids ausgelöst wird. Wenn ein Benutzer drückt die Enter-Taste in der Datagrid und das Datagrid beginnt eine neue Zeile zu erstellen, ich ein neues Element in meiner Samples BindableCollection mit dem Sample Klasse Konstruktor erstellen möge, die die SampleType verlangt, dass in übergeben werden.Datagrid.AddingNewItem Aktion im Ansichtsmodell nicht ausführen

Hier Datagrid XAML ist meine Ansicht:

<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> 

Und der wichtige Code in der Ansicht Modell:

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

ich bei der ersten Anweisung in deneinen Haltepunkt setzen Aber das Programm geht nie dorthin; Die Methode wird nie aufgerufen.

Ist etwas falsch mit meinem cal: Message.Attach Aussage, die ich nicht sehe?

Antwort

0

Haben Sie versucht, AddingNewItemEventArgs als Parameter der Methode zu setzen? Da die Methode "signature" mit der Ereignissignatur übereinstimmen muss, reicht es nicht aus, EventArgs zu übergeben. CM versteht das, besonders da Sie $ eventArgs special verwenden.

Wenn ich ein Ereignis hinzugefügt habe, wusste ich nicht die Signatur dafür auswendig Ich würde die Methode mit dem Designer hinzufügen, um "Code hinter" zu kopieren, kopieren und fügen Sie die Teile, die ich brauche, zu meiner Viewmodel-Methode in Frage.

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

+0

Ja, habe ich versucht, sowohl die generische Ereignis Kunst und die spezifischen für AddingNewItem. Keine funktionierte. – blueshift

+0

Also verspottet dies, um zu sehen, ob etwas fehlt ... Es feuert sofort ab, wenn man "anfängt", die neue Zeile hinzuzufügen. Ist dieses Datagrid nun in einer anderen Kontrolle eingebettet (verschachtelt)? Besteht die Möglichkeit, dass das Datagrid keinen Datenkontext hat? Haben Sie CM-Debugging aktiv? 'LogManager.GetLog = type => new DebugLog (type);' Setze den Bootstrapper-Konstruktor vor 'Initialize();' vorausgesetzt, du hast ihn nicht oder nie benutzt. Führen Sie das Projekt von VS im Debug-Modus, Konsole Ausgabe wird CM Debug Informationen enthalten ... – mvermef

+0

Hier ist die Lösung. Ich musste die vollständige Interaction.Trigger-Syntax verwenden, die in der Caliburn.Micro-Dokumentation aufgeführt ist. Dazu gehört die Verwendung der Anweisung cal: Parameter für den speziellen Wert $ eventArgs. Wenn ich die Anwendung ausgeführt habe, hat sie die AddSampleWithType-Methode aufgerufen, bevor sie eine neue Zeile erstellt hat. Seltsamerweise bin ich nach diesem Test zu der Kurznachricht Message.Attach zurückgekehrt und die AddSampleWithType-Methode wurde aufgerufen. Es verhielt sich so, als ob die volle Syntax benötigt würde, um die Pumpe "zu starten". Danke, mvermef, für deine Hilfe. – blueshift

Verwandte Themen