Wie kann ich einen Befehlsparameter von MenuItem an übergeordneten Grid DataContext binden?CommandParameter von MenuItem an übergeordnetes DataGrid binden
Ich habe ein DataGrid mit ContextMenu, das die Menüelemente an ViewModel-Befehle bindet, aber der Befehlsparameter ist immer null.
Ich verwende Tag-Parameter in DataGrid, um Zugriff auf DataContext zu erhalten und den gewünschten Befehl zu verwenden, könnte aber herausfinden, dass die Bindungsdaten aus jeder Zeile als Befehlsparameter verwendet werden.
Ich hatte bereits viele Antworten hier untersucht, konnte aber niemanden finden, der funktioniert, der Befehlsparameter im ViewModel wird aufgerufen und der Befehlsparameter ist immer Null.
C#
public class People
{
public int Id { get; set; }
public string Name { get; set; }
}
public class PeopleWindowViewModel
{
public List<People> Peoples { get; set; }
public PeopleWindowViewModel()
{
// populate Peoples list...
}
public ICommand RemoveCommand
{
get
{
return RelayCommand.Create((m) =>
{
// m always null
});
}
}
}
public class PeoplePage : Page
{
public PeoplePage()
{
InitializeComponent();
DataContext = new PeopleWindowViewModel();
}
}
XAML:
<DataGrid
Margin="0 8 0 8"
d:DataContext="{d:DesignInstance local:People}"
IsReadOnly="True"
ItemsSource="{Binding Peoples}"
Tag="{Binding DataContext,
RelativeSource={RelativeSource AncestorType={x:Type Page}}}">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Id}"
Header="Id" />
<DataGridTextColumn
Binding="{Binding Name}"
Header="Name" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu
Tag="{Binding Path=PlacementTarget.Tag,
RelativeSource={RelativeSource Self}}">
<MenuItem
Command="{Binding PlacementTarget.Tag.RemoveCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=ContextMenu}}"
CommandParameter="{Binding Path=Id,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=DataGrid}}"
Header="Remover" />
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
</Page>
Nur eine Frage, damit ich Ihnen helfen kann: Sie müssen das Kontextmenü kontextuell für die DataGrid-Zeile, richtig? –
@RodrigoVedovato ja !!! – Trxplz0