1

全て

問題があります。現在、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 イベントも発生しないことがわかったので、次のように 2 つのイベント ハンドラーを登録します。

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、先に進みますが、次の問題が発生します。ViewModel で ICommand が起動されず、Button_MouseLeftButtonDown が呼び出されました。

ViewModel で ICommand を呼び出す方法を知っている人はいますか? またはそれを実装する別の方法はありますか?

4

2 に答える 2

0

使用できますICommand.Execute。したがって、ハンドラーは

private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    StartRecordCommand.Execute(null);
}
于 2013-11-07T06:41:38.227 に答える
0

ViewModel で IsRecording という bool プロパティに TwoWay バインディングを使用して Button の IsPressed プロパティをバインドし、新しい bool 値に基づいてセッター内から記録ロジックを開始/停止してみてください (true は開始を意味します)。それが機能するかどうか教えてください。

于 2013-11-07T07:10:40.423 に答える