Puoi usare ICommand.Execute
. Quindi, il tuo gestore dovrebbe esserlo
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Domanda
Tutto
Ho un problema. Ora sto usando MVVM Framework per sviluppare l'app Windows Phone 8. Voglio solo quando premo il pulsante, quindi inizio a registrare qualcosa, durante il rilascio del pulsante, interrompere la registrazione, ho usato InvokeCommadaction per legare il comando in ViewModel, questo è il codice seguente
XAML:
<Button x:Name="BtnRecord" Height="50" Width="180" Background="#D43637" Content="Record" Margin="20,0,0,0" Style="{StaticResource BasicButtonStyle}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction Command="{Binding StartRecordCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding EndRecordCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
ModelView:
public ICommand StartRecordCommand
{
get
{
return new DelegateCommand(StartRecord);
}
}
public ICommand EndRecordCommand
{
get
{
return new DelegateCommand(EndRecord);
}
}
private void StartRecord(object parameter){}
private void EndRecord(object parameter){}
Quando ho eseguito il debug dell'app, ho scoperto che non ha sparato né gli eventi di MouseleftButtondown né MouseleftButtonup, quindi registro il gestore di due eventi come segue:
BtnRecord.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Button_MouseLeftButtonDown), true);
BtnRecord.AddHandler(UIElement.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Button_MouseLeftButtonUp), true);
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
private void Button_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
Ok, continua ad andare avanti, ma il prossimo problema è arrivare, non ha sparato l'ICommand in ViewModel, ha chiamato Button_MouseleftButtondown, oh, Dio, sono pazzo
Qualcuno sa come chiamare l'ICommand in ViewModel? O un altro modo per implementarlo?
Soluzione
Puoi usare ICommand.Execute
. Quindi, il tuo gestore dovrebbe esserlo
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Altri suggerimenti
Prova a vincolare la proprietà ispressa del pulsante con un twoway che si lega a una proprietà bool chiamata isrecording nel tuo ViewModel e avvia/interrompi la logica di registrazione dall'interno del setter in base al nuovo valore bool (true significherebbe iniziare). Fammi sapere se funziona.