您可以使用 ICommand.Execute
. 。因此,您的处理程序应该是
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
题
全部
我有一个问题。现在,我正在使用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 Events,所以我注册了两个活动处理程序:
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)
{
}
好的,继续前进,但是下一个问题即将到来,它没有在ViewModel中发射Icommand,它叫Button_mouseleftbuttondown,哦,上帝,我疯了
有人知道如何在ViewModel中调用ICommand吗?还是另一种实施方法?
解决方案
您可以使用 ICommand.Execute
. 。因此,您的处理程序应该是
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
StartRecordCommand.Execute(null);
}
其他提示
尝试将按钮的当属性绑定在您的ViewModel中的Bool属性,并根据新的Bool值从设置器内部启动/停止录制逻辑(true将意味着启动)。让我知道它是否有效。