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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top