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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top