Puedes usar ICommand.Execute
. Entonces, tu manejador debería ser
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Pregunta
Todos
Tengo un problema. Ahora estoy usando MVVM Framework para desarrollar la aplicación Windows Phone 8. Solo quiero que cuando presiono el botón, luego comience a grabar algo, cuando suelte el botón, deje de grabar, utilicé InvokeCommandAction para vincular el comando en ViewModel, este es el código de la siguiente manera
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){}
Cuando debuge la aplicación, descubrí que no disparé ni los eventos MouseleftButtondown ni MouseleftButtonup, así que registro el controlador de dos eventos de la siguiente manera:
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, sigue adelante, pero el siguiente problema está llegando, no disparó al iCommand en ViewModel, llamó Button_MouseleftButtondown, oh, Dios, estoy loco
¿Alguien sabe cómo llamar al iCommand en ViewModel? U otra forma de implementarlo?
Solución
Puedes usar ICommand.Execute
. Entonces, tu manejador debería ser
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Otros consejos
Intente vincular la propiedad ISPressed del botón con un enlace de dos años a una propiedad BOOL llamada IsRecording en su ViewModel e inicie/detenga su lógica de grabación desde el interior del setter en función del nuevo valor de bool (verdadero significaría comenzar). Déjame saber si funciona.