Как добавить обработчик событий в MVVM в Windows Phone 8?

Все

У меня есть проблема. Сейчас я использую MVVM-фреймворк для разработки приложения для Windows Phone 8. Я просто хочу, чтобы, когда я нажимаю кнопку, затем начинаю что-то записывать, когда отпускаю кнопку, останавливаю запись, я использовал InvokeCommandAction для привязки команды в ViewModel, это код, как показано ниже

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

Когда я отлаживал приложение, я обнаружил, что оно не вызывает ни события MouseLeftButtonDown, ни MouseLeftButtonUp, поэтому я зарегистрировал обработчик двух событий следующим образом:

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

Хорошо, продолжайте, но следующая проблема наступает, она не запускает ICommand во ViewModel, она называется Button_MouseLeftButtonDown, о боже, я сумасшедший

Кто-нибудь знает, как вызвать ICommand во ViewModel? Или другой способ реализовать это?

2 ответа

Решение

Ты можешь использовать ICommand.Execute, Итак, ваш обработчик должен быть

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

Попробуйте связать свойство IsPressed для Button с привязкой TwoWay к свойству bool, называемому IsRecording в вашей ViewModel, и запустите / остановите логику записи изнутри в установщике на основе нового значения bool (true будет означать start). Дайте мне знать, если это работает.

Другие вопросы по тегам