Frage

Alle

Ich habe ein Problem. Jetzt verwende ich MVVM Framework, um Windows Phone 8 App zu entwickeln. Ich möchte nur, wenn ich die Taste drücke und dann anfange, etwas aufzunehmen. Wenn ich die Taste veröffentlichen, habe ich invokeCommandaction verwendet, um den Befehl in ViewModel zu binden. Dies ist der Code wie folgt

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){}

Als ich die App debuggierte, stellte ich fest, dass sie weder die Mouseleftbuttondown noch die Ereignisse von Mouseleftbuttonups abgefeuert haben. Deshalb registriere ich den beiden Event -Handler wie folgt:

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, mach weiter, aber das nächste Problem ist, es hat das Sehen in ViewModel nicht abgefeuert, es nannte die Button_Mouseleftbuttondown, oh, Gott, ich verrückt

Weiß jemand, wie man den Icommand in ViewModel anruft? Oder eine andere Möglichkeit, es umzusetzen?

War es hilfreich?

Lösung

Sie können verwenden ICommand.Execute. Ihr Handler sollte also sein

private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    StartRecordCommand.Execute(null);
}

Andere Tipps

Versuchen Sie, die isprimierte Eigenschaft der Taste mit einer zweiwertigen Bindung an eine BOOL -Eigenschaft namens IsRecording in Ihrem ViewModel zu binden und starten/stoppen Sie Ihre Aufzeichnungslogik im Setter basierend auf dem neuen Bool -Wert (TRUE würde einen Start haben). Lass mich wissen ob es funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top