Mit MVVM, wie pass SelectedItems einer XamDataGrid als parameter für den Befehl ausgelöst hat, indem Sie die ContextMenu?
Ich versuche, übergeben Sie das Element auf XamDataGrid, auf dem ich einen Maus-Rechtsklick öffnen Sie ein Kontextmenü, das wirft einen Befehl in meinem ViewModel. Irgendwie ist die Methode, die den Befehl aufruft, ist nicht erreichbar im debug-Modus.
Dies ist der Schnitt aus der Sicht
<ig:XamDataGrid DataSource="{Binding DrdResults}" Height="700" Width="600">
<ig:XamDataGrid.ContextMenu>
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self},
Path=PlacementTarget.DataContext}"
AllowDrop="True" Name="cmAudit">
<MenuItem Header="View History"
Command="{Binding ViewTradeHistory}"
CommandParameter="{Binding Path=SelectedItems}">
</MenuItem>
</ContextMenu>
</ig:XamDataGrid.ContextMenu>
<ig:XamDataGrid.FieldSettings>
<ig:FieldSettings AllowFixing="NearOrFar"
AllowEdit="False"
Width="auto" Height="auto" />
</ig:XamDataGrid.FieldSettings>
</ig:XamDataGrid>
Meinen code in das entsprechende ViewModel für diese Ansicht ist wie folgt.
public WPF.ICommand ViewTradeHistory
{
get
{
if (_viewTradeHistory == null)
{
_viewTradeHistory = new DelegateCommand(
(object SelectedItems) =>
{
this.OpenTradeHistory(SelectedItems);
});
}
return _viewTradeHistory;
}
}
Und schließlich die eigentliche Methode, die aufgerufen wird, indem der Befehl ist wie folgt
private void OpenTradeHistory(object records)
{
DataPresenterBase.SelectedItemHolder auditRecords
= (DataPresenterBase.SelectedItemHolder)records;
//Do something with the auditRecords now.
}
Ich bin mir nicht sicher, was mache ich falsch hier. Jede Hilfe wird sehr geschätzt werden.
Dank,
Shravan
InformationsquelleAutor user290669 | 2010-06-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich, dass die Arbeit durch die Verbesserung Damian Antwort (das war nicht ganz funktioniert).
Hier ist meine Lösung:
Zunächst das Verhalten:
Und dann seine Verwendung:
Natürlich werden Sie brauchen, um eine "SelectedDataItems" im view-Modell.
Edit: Die
SelectedDataItems
Eigenschaft in der view-Modell werden instantited zunächst als eine leere Sammlung, sonst funktioniert es nicht.InformationsquelleAutor Antoine Jaussoin
Für ein einzelnes Element, infragistics war freundlich genug, fügen Sie eine bindbare DependencyProperty namens 'ActiveDataItem", das ist "der" ausgewählten Element, falls vorhanden.
Es funktioniert sogar, zwei-Weg, D. H. Sie setzt die Auswahl innerhalb der ViewModel.
Leider AFAIK gibt es keine solche Sache für multi-Auswahl.
Sie implementieren müssen, um diese auf Ihre eigenen, Durchlaufen die ausgewählten Einträge, prüfen Sie, ob Sie datarecords, erhalten Sie den Datensatz und dataitem etc...
InformationsquelleAutor Simon D.
Versuchen, die Bindung Ihres DataGrid ist SelectedItem auf eine Eigenschaft in deinem viewmodel.
Können Sie dann Zugriff auf diese Eigenschaft in Ihrem
OpenTradeHistory()
Methode.Was ist gemeint mit SelectedItems in dieser Zeile
CommandParameter="{Binding Path=SelectedItems}">
? Wenn diese waren die ursprüngliche Ausgewählten Elemente im raster dann, warum Sie senden Sie Sie als parameter an, wenn rechts-Klick nicht wählen Sie ein Element?Vielen Dank für Ihr kommen zurück auf diese. Ich habe nicht eine SelectedItem-Eigenschaft auf XamDataGrid, alles, was ich fand, war dieser und ich dachte, ich könnte diese und Iteration über die Elemente selbst, wenn ich in der Lage bin, einen halt zu bekommen. Ich wirklich brauchen, um in der Lage sein, um übergeben Sie die Werte aus der Zeile, auf die ich mit der rechten klicken Sie auf und öffnen Sie ein ContextMenu-Element, zum anzeigen von details über das Objekt aus dem Netz. ist das klar? Jede Hilfe, dankbar.
InformationsquelleAutor Amsakanna
Für die Bindung an die ausgewählten Elemente, die ich wählte, um ein behavior zu erstellen, die mit System.Interaktivität:
Einige, wo Ihrer Ansicht nach würden so etwas wie die folgende (ich habe ausgefiltert, die namespace-mappings für die Kürze):
Nun Ihr problem mit dem Befehl verbindlich auf ein Kontext-Menü, das ist etwas anderes... ich werde besuchen Sie diese
Froh, dass es dir geholfen auf die richtige Spur. Ich dachte, ich Riss diese direkt von funktionierenden code, aber da ich nicht Zugriff auf die code-Basis mehr, keine Möglichkeit zu sagen. Egal, guten Fang.
InformationsquelleAutor Damian