【问题标题】:How to add event handler in MVVM in Windows Phone 8?如何在 Windows Phone 8 的 MVVM 中添加事件处理程序?
【发布时间】:2013-11-07 03:17:42
【问题描述】:

全部

我有一个问题。现在我正在使用 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>

模型视图:

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

好的,继续,但是下一个问题来了,它没有触发 ViewModel 中的 ICommand,它调用了 Button_MouseLeftButtonDown,哦,天哪,我疯了

有人知道如何在 ViewModel 中调用 ICommand 吗? 还是另一种实现方式?

【问题讨论】:

    标签: c# xaml mvvm windows-phone-8 simple-mvvm


    【解决方案1】:

    您可以使用ICommand.Execute。所以,你的处理程序应该是

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

    【讨论】:

      【解决方案2】:

      尝试将 Button 的 IsPressed 属性与 TwoWay 绑定绑定到 ViewModel 中名为 IsRecording 的 bool 属性,并根据新的 bool 值从 setter 内部开始/停止录制逻辑(true 表示开始)。 让我知道它是否有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多