Gestore di eventi in DataTemplate
-
05-07-2019 - |
Domanda
Ho ComboBox WPF all'interno di un modello di dati (molte caselle combinate nella casella di riepilogo) e desidero gestire il pulsante Invio. Sarebbe facile se fosse ad es. un pulsante: vorrei utilizzare Command + Percorso di rilegatura relativo ecc. Sfortunatamente, non ho idea di come gestire la pressione dei tasti con un comando o come impostare il gestore eventi dal modello. Qualche suggerimento?
Soluzione 2
Ho risolto il mio problema utilizzando un normale gestore di eventi in cui cammino attraverso l'albero visivo, trovo il pulsante corrispondente e lo chiamo comando. Se qualcun altro ha lo stesso problema, pubblica un commento e fornirò maggiori dettagli sulla realizzazione.
UPD
Ecco la mia soluzione:
Cerco un pulsante nell'albero visivo e quindi eseguo il comando associato al pulsante.
View.xaml:
<ComboBox KeyDown="ComboBox_KeyDown"/>
<Button Command="{Binding AddResourceCommand}"/>
View.xaml.cs:
private void ComboBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var parent = VisualTreeHelper.GetParent((DependencyObject)sender);
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i) as Button;
if (null != child)
{
child.Command.Execute(null);
}
}
}
}
Altri suggerimenti
Puoi utilizzare EventSetter nello stile con cui stai impostando il modello:
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" />
<Setter Property="Template" ... />
</Style>
Questo articolo ha un modo per instradare qualsiasi Evento
a Command
http://nerobrain.blogspot.nl/2012/ 01 / WPF-eventi-a-command.html