Vous pouvez utiliser ICommand.Execute
. Donc, votre gestionnaire devrait être
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Question
Tout
J'ai un problème. Maintenant, j'utilise MVVM Framework pour développer l'application Windows Phone 8. Je veux juste quand j'appuie sur le bouton, puis commence à enregistrer quelque chose, lors de la libération du bouton, arrête d'enregistrer, j'ai utilisé invokecommandAction pour lier la commande dans ViewModel, c'est le code comme suit
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){}
Lorsque je débogage de l'application, j'ai trouvé qu'il n'avait pas licencié les événements Mouseleftbuttondown ni Mouseleftbuttonup, alors j'enregistre le gestionnaire d'événements comme suit:
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, continuez, mais le prochain problème arrive, il n'a pas tiré l'iMommand dans ViewModel, il a appelé le Button_MouseleftButtondown, oh, Dieu, je suis fou
Quelqu'un sait-il comment appeler l'Icommand dans ViewModel? Ou une autre façon de l'implémenter?
La solution
Vous pouvez utiliser ICommand.Execute
. Donc, votre gestionnaire devrait être
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Autres conseils
Essayez de lier la propriété ispressée du bouton avec une liaison Twoway à une propriété bool appelée IsRecording dans votre ViewModel et démarrez / arrêtez votre logique d'enregistrement à l'intérieur du secteur en fonction de la nouvelle valeur bool (true signifierait démarrer). Dites moi si ca marche.