Schießen mit einem RelayCommand von einer Schaltfläche innerhalb eines WPF-DataGrid
Ich habe eine DataGrid
zeigt eine Liste der Kunden, die in XAML definiert wie folgt gebunden mein ViewModel:
<DataGrid Name="CustomersDataGrid" ItemsSource="{Binding Customers}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding showCustomerCommand}"
Content="{Binding Path=Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Die raster-Anzeige funktioniert einwandfrei. Ich möchte in der Lage sein, um die Anzeige der Angaben eines einzelnen Kunden. Ich hatte vorher das setup eine Bindung für die ausgewählte Zeile, und hatte eine Schaltfläche auf der Seite, die gebunden war, um den folgenden Befehl ein:
RelayCommand _showCustomerCommand;
public ICommand showCustomerCommand
{
get
{
if (_showCustomerCommand == null)
{
_showCustomerCommand = new RelayCommand(param => this.ShowCustomer());
}
return _showCustomerCommand;
}
}
private void ShowCustomer()
{
if (Parent != null)
{
//Handle Customer Display Here
}
}
Dies funktionierte gut. Aber ich möchte in der Lage sein, um Sie auf eine Schaltfläche innerhalb der einzelnen Zeile, sondern die einzige Schaltfläche auf der Grundlage der ausgewählten Zeile. Ich weiß, der datacontext ist falsch in der obigen XAML, aber ich weiß nicht, wie es richtig ist, noch wie Sie zu passieren, die bestimmten Zeile, aus der Sie die Taste drücken Sie stammt. Alle Vorschläge, mir zu helfen, den Draht meine embedded-Taste werden dankbar angenommen!
InformationsquelleAutor Adrian Hand | 2012-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies wird Ihnen helfen,
InformationsquelleAutor Jithesh kumar
Diese Frage/Antwort sieht ähnlich aus wie das, was Sie suchen.
Können Sie binden die ID der Zeile in der Kommando-parameter
Bitte Lesen Sie die Antworten sorgfältig. Auch in meiner Antwort gab ich Ihnen die MVVM Weg. Deine Bindung bleibt die gleiche, aber jetzt ist es ein parameter, den Sie verwenden können, in Ihrem Befehl.
Ich verstehe; vielen Dank. Ich war jedoch, wie pro meine Frage Titel suchen Anleitung, wie ich es verwenden können, mit einem relaycommand. Kurz gesagt, ich hatte gehofft, für ein wenig mehr aufwendige Antwort.
InformationsquelleAutor Jakub Kaleta
Resharper/Intellisense Folgerung ist falsch, innerhalb von
DataGridTemplate
.Dies kann zu Verwirrung führen, um zu korrigieren, dass das DataTemplate sollte eine explizite Datentyp verweisen auf die Art, dass die Zeile an.
Gibt es 2 Möglichkeiten, die ich gefunden für die Lösung Ihrer Frage, Mit einem Relativen Verbindlichkeit für den Befehl , so dass es bindet über das Kontextmenü des DataGrid nicht die aktuelle Zeile, Oder erstellen Sie ein x:Name-Attribut für ein element, das den Kontext, die Sie binden möchten.
Es ist meine überzeugung, dass die relative Bindung ist sauberer, wenn Sie versuchen, Zugriff auf einen Ahnen, aber wenn Sie zu binden, müssen etwas an anderer Stelle in den Baum, dann vielleicht ElementName ermöglichen.
XAML:
Klasse:
InformationsquelleAutor Ryan The Leach