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?
Ja, habe ich versucht, sowohl die generische Ereignis Kunst und die spezifischen für AddingNewItem. Keine funktionierte. – blueshift
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
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