Você pode usar ICommand.Execute
. Então, seu manipulador deve ser
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Pergunta
Tudo
Eu tenho um problema. Agora estou usando o MVVM Framework para desenvolver o aplicativo Windows Phone 8. Eu só quero quando pressiono o botão, então começo a gravar algo, quando solte o botão, pare de gravar, usei InvoKecommandaction para vincular o comando no ViewModel, este é o código da seguinte maneira
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 depuro o aplicativo, descobri que não demiti os eventos de Mouseleftbuttondown nem Mouseleftbuttonup, então registro o manipulador de dois eventos da seguinte maneira:
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, continue, mas o próximo problema está chegando, não demitiu o Icommand em vista
Alguém sabe como chamar o ICommand em ViewModel? Ou outra maneira de implementá -lo?
Solução
Você pode usar ICommand.Execute
. Então, seu manipulador deve ser
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
Outras dicas
Tente vincular a propriedade ispressada do botão com uma ligação de dois anos a uma propriedade Bool chamada IsRecording no seu ViewModel e inicie/pare sua lógica de gravação de dentro do setter com base no novo valor BOOL (true significaria o início). Deixe -me saber se funcionar.