2013-11-07 3 views
1

ВсеКак добавить обработчик событий в 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? Или другой способ его реализации?

ответ

0

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

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

Большое спасибо, это работает для меня –

+0

Это не стиль MVVM ... – Liel

+0

Как это будет выглядеть в стиле MVVM? – venerik

0

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

Смежные вопросы